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