Saltar al contingut

Tensor

La funció d'un tensor és representar les dades de manera numèrica.

PyTorch permet manipular i processar dades i escriure algorismes d’aprenentatge automàtic utilitzant codi Python.

Crea una máquina Linux a Isard amb GPU.

Instal.la PyCharm.

Instal·la UV.

Crea un projecte pytorch:

Terminal window
uv init --python 3.12 tensor
cd tensor
uv add torch torchvision

Importa PyTorch i comprova la versió que estàs utilitzant.

import torch
print(torch.__version__)

Prova que el projecte pot utilitzar CUDA

main.py
import torch
print("cuda", torch.cuda.is_available())

Els tensors són el bloc fonamental de l’aprenentatge automàtic.

La seva funció és representar les dades de manera numèrica.

Un tensor s’assembla molt a un array de Numpy.

Un escalar és un tensor de dimensió zero.

3
main.py
import torch
scalar = torch.tensor(7)
print(scalar)

Veus com s’ha imprès tensor(7) en lloc de 7?

Terminal window
tensor(7)

Això vol dir que encara que scalar sigui un únic número, és de tipus torch.Tensor.

Pots comprovar les dimensions d’un tensor utilitzant l’atribut ndim.

main.py
import torch
scalar = torch.tensor(7)
assert scalar.ndim == 0

I si volguéssim obtenir el número del tensor?

És a dir, convertir-lo de torch.Tensor a un enter de Python? 🤨

Per fer-ho podem utilitzar el mètode item().

main.py
import torch
scalar = torch.tensor(7)
assert scalar.item() == 7

Un vector és un tensor de dimensió 1.

371

Un vector pot contenir molts números.

Per exemple, pots tenir un vector

  • [3, 2] per descriure [bedrooms, bathrooms] a casa teva.
  • [3, 6, 9, 5, 8] per descriure les notes d’un grup d’estudiants.

El que importa és que un tensor és flexible en el que pot representar:

main.py
import torch
vector = torch.Tensor([7,7])
print(vector)

Ara el vector ara conté dos 7:

Terminal window
tensor([7., 7.])

Quantes dimensions creus que tindrà?

main.py
import torch
vector = torch.Tensor([7,7])
assert vector.ndim == 1

El vector conté dos números, però només té una única dimensió.

Pots saber el nombre de dimensions que té un tensor a PyTorch comptant el nombre de claudàtors ([) a l’exterior, i només cal comptar un costat.

Quants claudàtors té el vector?

Un altre concepte important pels tensors és el seu atribut shape.

La forma ens diu com estan disposats els elements dins del tensor.

Comprovem la forma del teu vector.

main.py
import torch
vector = torch.Tensor([7,7])
print(vector.shape)

El resultat és torch.Size([2]), que significa que el vector té una forma de [2].

Terminal window
torch.Size([2])

Això és degut als dos elements que has col·loca dins dels claudàtors ([7, 7]).

Una matriu és un tensor de dimensió 2.

371
483
main.py
import torch
matrix = torch.tensor([[7,8],[9,10]])
print(matrix)

Les matrius són tan flexibles com els vectors, però tenen una dimensió extra.

Terminal window
tensor([[ 7, 8],
[ 9, 10]])

matrix té dues dimensions (has comptat el nombre de claudàtors a l’exterior d’un costat?).

main.py
import torch
matrix = torch.tensor([[7,8],[9,10]])
assert matrix.ndim == 2

Quina forma creus que tindrà?

main.py
import torch
matrix = torch.tensor([[7,8],[9,10]])
print(matrix.shape)

Pots crear un tensor de qualsevol dimensió.

Per exemple un tensor de dimensió 3:

main.py
import torch
matrix = torch.tensor([
[[7, 8, 7], [9, 10, 6]],
[[3, 4, 2], [1, 3, 2]],
[[6, 4, 7], [3, 6, 2]],
[[3, 6, 4], [6, 3, 1]]
])
print(matrix.shape)
Terminal window
torch.Size([4, 2, 3])

Hem establert que els tensors representen algun tipus de dades.

I els models d’aprenentatge automàtic com les xarxes neuronals manipulen i busquen patrons dins dels tensors.

Però quan construïm models d’aprenentatge automàtic amb PyTorch, és poc freqüent que creem tensors a mà (com hem estat fent).

En lloc d’això, un model d’aprenentatge automàtic sovint comença amb grans tensors de nombres aleatoris i ajusta aquests nombres aleatoris mentre treballa amb les dades per representar-les millor.

En essència:

Començar amb nombres aleatoris

Mirar les dades

Actualitzar nombres aleatoris

Com a científic de dades, pots definir com el model d’aprenentatge automàtic comença (inicialització), mira les dades (representació) i actualitza (optimització) els teus nombres aleatoris.

Més endavant treballarem amb aquests passos de manera pràctica.

Per ara, vegem com crear un tensor de nombres aleatoris.

Podem fer-ho utilitzant torch.rand() i passant el paràmetre size.

main.py
import torch
tensor = torch.rand(size=(4, 3))
print(tensor)

Pots veure que el tensor és de mida (4,3)i s’ha omplert amb nombres aleatoris entre el 0 i l’1:

Terminal window
tensor([[0.4576, 0.9100, 0.8061],
[0.2090, 0.7874, 0.7142],
[0.7520, 0.7464, 0.0220],
[0.1269, 0.1697, 0.3464]])

The flexibility of torch.rand() is that we can adjust the size to be whatever we want.

Per exemple, una imatge es representa amb una rectangle de píxels, on per cada píxel es guarden els valors vermell, verd, i blau.

Si tens una imatge d’una alçada de 224 píxels, una amplada de 224 píxels i 3 canals de color (vermell, verd, blau), la pots representar amb un tensor amb forma [224, 224,3 ] ([height, width, colour_channels]).

main.py
import torch
tensor = torch.rand(size=(224, 224, 3))
print(tensor)

El contingut d'aquest lloc web té llicència CC BY-NC-ND 4.0.

©2022-2025 xtec.dev