1. Què és PyTorch?

PyTorch és una biblioteca de deep learning de codi obert desenvolupada per Facebook's AI Research lab (FAIR). És àmpliament utilitzada per la seva flexibilitat i facilitat d'ús, especialment en recerca i desenvolupament de models de deep learning.

Característiques clau de PyTorch:

  • Tensor Computation: Similar a NumPy, però amb suport per a GPU.
  • Autograd: Sistema automàtic de diferenciació per a la construcció i entrenament de xarxes neuronals.
  • Models Definits Dinàmicament: Permet definir models de manera dinàmica, facilitant la depuració i la modificació.
  • Suport per a GPU: Permet l'acceleració de càlculs utilitzant GPU.

  1. Instal·lació de PyTorch

Requisits previs:

  • Python 3.6 o superior
  • pip (gestor de paquets de Python)

Instal·lació amb pip:

pip install torch torchvision torchaudio

Instal·lació amb Conda:

conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch

  1. Conceptes Bàsics de PyTorch

3.1 Tensors

Els tensors són la unitat bàsica de dades en PyTorch, similar als arrays de NumPy però amb capacitats addicionals per a operacions en GPU.

Creació de tensors:

import torch

# Crear un tensor buit
x = torch.empty(5, 3)
print(x)

# Crear un tensor amb valors aleatoris
x = torch.rand(5, 3)
print(x)

# Crear un tensor amb zeros
x = torch.zeros(5, 3, dtype=torch.long)
print(x)

# Crear un tensor directament des de dades
x = torch.tensor([5.5, 3])
print(x)

3.2 Operacions amb Tensors

Operacions bàsiques:

# Suma de tensors
y = torch.rand(5, 3)
print(x + y)

# Multiplicació de tensors
print(x * y)

# Producte matriu
print(torch.matmul(x, y.T))

Operacions amb GPU:

# Moure un tensor a GPU
if torch.cuda.is_available():
    device = torch.device("cuda")
    x = x.to(device)
    y = y.to(device)
    z = x + y
    print(z)

3.3 Autograd: Diferenciació Automàtica

PyTorch proporciona un sistema automàtic de diferenciació que permet calcular gradients de manera eficient.

Exemple de diferenciació automàtica:

# Crear un tensor amb gradient
x = torch.ones(2, 2, requires_grad=True)
print(x)

# Realitzar operacions
y = x + 2
print(y)

# Realitzar més operacions
z = y * y * 3
out = z.mean()
print(out)

# Calcula el gradient
out.backward()
print(x.grad)

  1. Construcció i Entrenament de Models

4.1 Definició d'un Model

En PyTorch, els models es defineixen com a subclasses de torch.nn.Module.

Exemple d'un model simple:

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

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

net = Net()
print(net)

4.2 Entrenament del Model

Definició de la funció de pèrdua i l'optimitzador:

import torch.optim as optim

criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.9)

Bucle d'entrenament:

for epoch in range(2):  # bucle sobre el conjunt de dades múltiples vegades
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data

        # Zero els gradients dels paràmetres
        optimizer.zero_grad()

        # Passar endavant + passar enrere + optimitzar
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

        # Imprimir estadístiques
        running_loss += loss.item()
        if i % 2000 == 1999:  # imprimir cada 2000 mini-batches
            print(f'[Epoch {epoch + 1}, Mini-batch {i + 1}] loss: {running_loss / 2000:.3f}')
            running_loss = 0.0

print('Entrenament finalitzat')

  1. Conclusió

En aquesta secció, hem introduït PyTorch, una poderosa biblioteca per al desenvolupament de models de deep learning. Hem cobert els conceptes bàsics, incloent la creació i manipulació de tensors, l'ús de l'autograd per a la diferenciació automàtica, i la construcció i entrenament de models. En els següents mòduls, explorarem aplicacions més avançades i pràctiques de PyTorch en deep learning.

© Copyright 2024. Tots els drets reservats