En aquest tema, aprendrem les operacions bàsiques amb tensors en PyTorch. Els tensors són la unitat fonamental de dades en PyTorch, similars als arrays en NumPy però amb capacitats addicionals per a l'ús en GPU. Aquestes operacions són essencials per a la manipulació de dades en xarxes neuronals.
Continguts
Creació de Tensors
Exemple de Codi
import torch
# Crear un tensor buit
tensor_buit = torch.empty(3, 3)
print("Tensor buit:\n", tensor_buit)
# Crear un tensor de zeros
tensor_zeros = torch.zeros(3, 3)
print("Tensor de zeros:\n", tensor_zeros)
# Crear un tensor de uns
tensor_uns = torch.ones(3, 3)
print("Tensor de uns:\n", tensor_uns)
# Crear un tensor amb valors aleatoris
tensor_aleatori = torch.rand(3, 3)
print("Tensor aleatori:\n", tensor_aleatori)
# Crear un tensor a partir d'una llista
tensor_llista = torch.tensor([1, 2, 3, 4, 5])
print("Tensor a partir d'una llista:\n", tensor_llista)Explicació
torch.empty: Crea un tensor no inicialitzat.torch.zeros: Crea un tensor ple de zeros.torch.ones: Crea un tensor ple de uns.torch.rand: Crea un tensor amb valors aleatoris entre 0 i 1.torch.tensor: Crea un tensor a partir d'una llista o array.
Operacions Matemàtiques Bàsiques
Exemple de Codi
# Crear tensors
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
# Suma
suma = a + b
print("Suma:\n", suma)
# Resta
resta = a - b
print("Resta:\n", resta)
# Multiplicació element a element
multiplicacio = a * b
print("Multiplicació element a element:\n", multiplicacio)
# Divisió element a element
divisio = a / b
print("Divisió element a element:\n", divisio)Explicació
+: Suma element a element.-: Resta element a element.*: Multiplicació element a element./: Divisió element a element.
Indexació i Tall de Tensors
Exemple de Codi
# Crear un tensor
tensor = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# Indexació
element = tensor[0, 1]
print("Element a la posició [0, 1]:\n", element)
# Tall
sub_tensor = tensor[:, 1]
print("Segona columna:\n", sub_tensor)
# Tall amb rang
sub_tensor_rang = tensor[0:2, 1:3]
print("Subtensor amb rang [0:2, 1:3]:\n", sub_tensor_rang)Explicació
tensor[i, j]: Accedeix a l'element a la posició[i, j].tensor[:, j]: Accedeix a tots els elements de la columnaj.tensor[i:j, k:l]: Accedeix a un subtensor des de[i, j]fins a[k, l].
Canvi de Forma (Reshape)
Exemple de Codi
# Crear un tensor
tensor = torch.tensor([[1, 2, 3], [4, 5, 6]])
# Canviar la forma del tensor
tensor_reshaped = tensor.view(3, 2)
print("Tensor amb nova forma (3, 2):\n", tensor_reshaped)Explicació
tensor.view: Canvia la forma del tensor sense alterar les dades subjacents.
Operacions amb GPU
Exemple de Codi
# Comprovar si hi ha GPU disponible
if torch.cuda.is_available():
device = torch.device("cuda")
print("GPU disponible")
else:
device = torch.device("cpu")
print("GPU no disponible, utilitzant CPU")
# Crear un tensor i moure'l a la GPU
tensor_gpu = torch.tensor([1, 2, 3], device=device)
print("Tensor a la GPU:\n", tensor_gpu)
# Moure un tensor existent a la GPU
tensor = torch.tensor([4, 5, 6])
tensor = tensor.to(device)
print("Tensor existent mogut a la GPU:\n", tensor)Explicació
torch.cuda.is_available(): Comprova si hi ha una GPU disponible.torch.device: Defineix el dispositiu (CPU o GPU).tensor.to(device): Mou el tensor al dispositiu especificat.
Exercicis Pràctics
Exercici 1
Crea un tensor de forma (4, 4) ple de valors aleatoris i calcula la seva suma total.
Solució
tensor_aleatori = torch.rand(4, 4)
suma_total = torch.sum(tensor_aleatori)
print("Suma total del tensor aleatori:\n", suma_total)Exercici 2
Crea dos tensors de forma (2, 3) i calcula la seva multiplicació element a element.
Solució
tensor_a = torch.tensor([[1, 2, 3], [4, 5, 6]])
tensor_b = torch.tensor([[7, 8, 9], [10, 11, 12]])
multiplicacio = tensor_a * tensor_b
print("Multiplicació element a element:\n", multiplicacio)Exercici 3
Crea un tensor de forma (3, 3) i extreu la segona fila.
Solució
tensor = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
segona_fila = tensor[1, :]
print("Segona fila del tensor:\n", segona_fila)Conclusió
En aquesta secció, hem après a crear tensors, realitzar operacions matemàtiques bàsiques, indexar i tallar tensors, canviar la seva forma i treballar amb tensors en GPU. Aquestes habilitats són fonamentals per a la manipulació de dades en PyTorch i seran la base per a temes més avançats en els següents mòduls.
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
