Introducció

En aquest mòdul, tindràs l'oportunitat de crear el teu propi projecte personalitzat utilitzant PyTorch. Aquest projecte et permetrà aplicar tots els coneixements adquirits al llarg del curs i desenvolupar una solució a un problema que t'interessi. El projecte personalitzat és una excel·lent manera de consolidar els teus coneixements i demostrar les teves habilitats en PyTorch.

Passos per Desenvolupar el Projecte

  1. Definició del Problema

El primer pas és definir clarament el problema que vols resoldre. Això pot incloure:

  • Tipus de problema: Classificació, regressió, detecció d'objectes, segmentació d'imatges, etc.
  • Dades: Quines dades necessites? On les pots obtenir?
  • Objectiu: Què esperes aconseguir amb el teu model?

  1. Recopilació i Preparació de Dades

Un cop definit el problema, necessitaràs recopilar i preparar les dades. Això pot incloure:

  • Recopilació de dades: Descarregar datasets públics, recollir dades pròpies, etc.
  • Preprocessament de dades: Neteja de dades, normalització, augmentació de dades, etc.

  1. Construcció del Model

Ara és el moment de construir el teu model. Això inclou:

  • Selecció del tipus de model: Xarxa neuronal simple, CNN, RNN, etc.
  • Definició de l'arquitectura: Nombre de capes, tipus de capes, funcions d'activació, etc.
  • Inicialització del model: Escriure el codi per definir el model en PyTorch.

  1. Entrenament del Model

Amb el model definit, pots procedir a entrenar-lo. Això inclou:

  • Definició de la funció de pèrdua: MSE, Cross-Entropy, etc.
  • Selecció de l'optimitzador: SGD, Adam, etc.
  • Bucle d'entrenament: Escriure el codi per entrenar el model amb les dades.

  1. Validació i Avaluació

Després de l'entrenament, necessitaràs validar i avaluar el teu model. Això inclou:

  • Divisió de les dades: Conjunt d'entrenament, validació i prova.
  • Mètriques d'avaluació: Accuracy, Precision, Recall, F1-Score, etc.
  • Ajust del model: Realitzar ajustos basats en els resultats de la validació.

  1. Desament i Càrrega del Model

Un cop estiguis satisfet amb el teu model, pots desar-lo per a ús futur. Això inclou:

  • Desament del model: Utilitzar torch.save per desar el model.
  • Càrrega del model: Utilitzar torch.load per carregar el model desat.

  1. Desplegament del Model

Finalment, pots desplegar el teu model per a ús en producció. Això pot incloure:

  • API: Crear una API per servir el model.
  • Aplicació web: Integrar el model en una aplicació web.
  • Optimització: Optimitzar el model per a un millor rendiment en producció.

Exemple de Projecte Personalitzat

Definició del Problema

Problema: Classificació d'imatges de flors en diferents categories.

Dades: Utilitzarem el dataset "Flowers Recognition" disponible a Kaggle.

Objectiu: Construir un model que pugui classificar imatges de flors en 5 categories diferents.

Recopilació i Preparació de Dades

import torch
from torchvision import datasets, transforms

# Definim les transformacions per a les dades d'entrenament i validació
transform = transforms.Compose([
    transforms.Resize((128, 128)),
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])

# Carreguem les dades d'entrenament i validació
train_data = datasets.ImageFolder('path/to/train_data', transform=transform)
val_data = datasets.ImageFolder('path/to/val_data', transform=transform)

train_loader = torch.utils.data.DataLoader(train_data, batch_size=32, shuffle=True)
val_loader = torch.utils.data.DataLoader(val_data, batch_size=32, shuffle=False)

Construcció del Model

import torch.nn as nn
import torch.nn.functional as F

class SimpleCNN(nn.Module):
    def __init__(self):
        super(SimpleCNN, self).__init__()
        self.conv1 = nn.Conv2d(3, 16, 3, 1)
        self.conv2 = nn.Conv2d(16, 32, 3, 1)
        self.fc1 = nn.Linear(32 * 30 * 30, 128)
        self.fc2 = nn.Linear(128, 5)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        x = F.max_pool2d(x, 2, 2)
        x = F.relu(self.conv2(x))
        x = F.max_pool2d(x, 2, 2)
        x = x.view(-1, 32 * 30 * 30)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

model = SimpleCNN()

Entrenament del Model

import torch.optim as optim

criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

for epoch in range(10):
    model.train()
    running_loss = 0.0
    for images, labels in train_loader:
        optimizer.zero_grad()
        outputs = model(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
    print(f"Epoch {epoch+1}, Loss: {running_loss/len(train_loader)}")

Validació i Avaluació

model.eval()
correct = 0
total = 0
with torch.no_grad():
    for images, labels in val_loader:
        outputs = model(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print(f"Accuracy: {100 * correct / total}%")

Desament i Càrrega del Model

# Desament del model
torch.save(model.state_dict(), 'flower_classification_model.pth')

# Càrrega del model
model = SimpleCNN()
model.load_state_dict(torch.load('flower_classification_model.pth'))

Desplegament del Model

Per desplegar el model, pots crear una API utilitzant frameworks com Flask o Django, o integrar-lo en una aplicació web.

Conclusió

El projecte personalitzat és una oportunitat per aplicar tot el que has après en aquest curs. Seguint els passos descrits, podràs desenvolupar un projecte complet utilitzant PyTorch, des de la definició del problema fins al desplegament del model. Recorda que la clau és practicar i experimentar amb diferents tipus de models i tècniques per millorar les teves habilitats. Bona sort!

© Copyright 2024. Tots els drets reservats