En aquest projecte, aplicarem els coneixements adquirits al llarg del curs per construir un model de classificació d'imatges utilitzant PyTorch. Aquest projecte ens permetrà consolidar conceptes com la càrrega i preprocessament de dades, la construcció de xarxes neuronals, l'entrenament i la validació de models, així com el desament i la càrrega de models.
Objectius del Projecte
- Càrrega i Preprocessament de Dades: Aprendre a carregar un conjunt de dades d'imatges i aplicar tècniques de preprocessament.
- Construcció del Model: Dissenyar i implementar una xarxa neuronal convolucional (CNN) per a la classificació d'imatges.
- Entrenament del Model: Entrenar la xarxa neuronal amb les dades de formació.
- Validació i Avaluació: Validar el model amb un conjunt de dades de validació i avaluar-ne el rendiment.
- Desament i Càrrega del Model: Desar el model entrenat i aprendre a carregar-lo per a futures prediccions.
- Càrrega i Preprocessament de Dades
1.1. Importació de Llibreries Necessàries
import torch import torch.nn as nn import torch.optim as optim import torchvision import torchvision.transforms as transforms from torch.utils.data import DataLoader
1.2. Definició de Transformacions
transform = transforms.Compose([ transforms.Resize((32, 32)), transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)) ])
1.3. Càrrega del Conjunt de Dades
Utilitzarem el conjunt de dades CIFAR-10 per a aquest projecte.
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform) trainloader = DataLoader(trainset, batch_size=32, shuffle=True) testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform) testloader = DataLoader(testset, batch_size=32, shuffle=False)
- Construcció del Model
2.1. Definició de la Xarxa Neuronal Convolucional (CNN)
class SimpleCNN(nn.Module): def __init__(self): super(SimpleCNN, self).__init__() self.conv1 = nn.Conv2d(3, 16, 3, padding=1) self.conv2 = nn.Conv2d(16, 32, 3, padding=1) self.pool = nn.MaxPool2d(2, 2) self.fc1 = nn.Linear(32 * 8 * 8, 128) self.fc2 = nn.Linear(128, 10) self.relu = nn.ReLU() def forward(self, x): x = self.pool(self.relu(self.conv1(x))) x = self.pool(self.relu(self.conv2(x))) x = x.view(-1, 32 * 8 * 8) x = self.relu(self.fc1(x)) x = self.fc2(x) return x net = SimpleCNN()
- Entrenament del Model
3.1. Definició de la Funció de Pèrdua i l'Optimitzador
3.2. Bucle d'Entrenament
for epoch in range(10): # nombre d'èpoques running_loss = 0.0 for i, data in enumerate(trainloader, 0): inputs, labels = data optimizer.zero_grad() outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() if i % 200 == 199: # imprimeix cada 200 mini-lots print(f'[Epoch {epoch + 1}, Mini-lot {i + 1}] pèrdua: {running_loss / 200:.3f}') running_loss = 0.0 print('Entrenament completat')
- Validació i Avaluació
4.1. Avaluació del Model
correct = 0 total = 0 with torch.no_grad(): for data in testloader: images, labels = data outputs = net(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() print(f'Precisió de la xarxa en les 10000 imatges de prova: {100 * correct / total:.2f}%')
- Desament i Càrrega del Model
5.1. Desament del Model
5.2. Càrrega del Model
Conclusió
En aquest projecte, hem après a construir un model de classificació d'imatges utilitzant PyTorch. Hem cobert tot el procés des de la càrrega i preprocessament de dades fins a la construcció, entrenament, validació i desament del model. Aquest projecte ens proporciona una base sòlida per abordar problemes de classificació d'imatges més complexos i avançats en el futur.
PyTorch: De Principiant a Avançat
Mòdul 1: Introducció a PyTorch
- Què és PyTorch?
- Configuració de l'Entorn
- Operacions Bàsiques amb Tensor
- Autograd: Diferenciació Automàtica
Mòdul 2: Construcció de Xarxes Neuronals
- Introducció a les Xarxes Neuronals
- Creació d'una Xarxa Neuronal Simple
- Funcions d'Activació
- Funcions de Pèrdua i Optimització
Mòdul 3: Entrenament de Xarxes Neuronals
- Càrrega i Preprocessament de Dades
- Bucle d'Entrenament
- Validació i Prova
- Desament i Càrrega de Models
Mòdul 4: Xarxes Neuronals Convolucionals (CNNs)
- Introducció a les CNNs
- Construcció d'una CNN des de Zero
- Aprenentatge per Transferència amb Models Preentrenats
- Ajust Fi de les CNNs
Mòdul 5: Xarxes Neuronals Recurrents (RNNs)
- Introducció a les RNNs
- Construcció d'una RNN des de Zero
- Xarxes de Memòria a Llarg i Curt Termini (LSTM)
- Unitats Recurrents Gated (GRUs)
Mòdul 6: Temes Avançats
- Xarxes Generatives Adversàries (GANs)
- Aprenentatge per Reforç amb PyTorch
- Desplegament de Models PyTorch
- Optimització del Rendiment