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 columna j.
  • 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.

© Copyright 2024. Tots els drets reservats