Fundamente Tensori în PyTorch (shape, dtype, reshape, view) în PyTorch & Deep Learning Practic

Tensori, Hardware & Autograd Nivel: începător

Structura de date fundamentală din PyTorch: crearea tensorilor, tipuri de date numerice (float32, int64, bfloat16), inspectarea dimensiunilor și manipularea formei fără copiere de memorie.

Sintaxă & invocare Python
import torch

# Creare tensor din date Python sau inițializare cu valori aleatoare:
x = torch.tensor([[1.0, 2.0], [3.0, 4.0]], dtype=torch.float32)
rand_tensor = torch.randn(size=(4, 16, 512))

# Modificarea dimensiunilor:
y = x.view(4)          # Necesită memorie contiguă (rapid, fără copiere)
z = x.reshape(1, 4)     # Funcționează întotdeauna

Descriere & Utilizare

În PyTorch, totul începe cu Tensorul (Tensor): o matrice multidimensională de date numerice identică conceptual cu un numpy.ndarray, dar cu două superputeri majore: 1) poate rula pe GPU-uri (NVIDIA CUDA, Apple Silicon MPS) pentru o viteză de calcul de 50x mai mare, și 2) ține minte toate operațiunile efectuate pentru calculul automat al derivatelor (gradient).

Fiecare tensor este definit de trei proprietăți esențiale: shape (dimensiunile, ex: [batch_size, sequence_length, hidden_dim]), dtype (tipul de date: torch.float32 pentru precizie standard, torch.bfloat16 pentru antrenare LLM modernă, torch.int64 pentru indecși de tokeni) și device (unde trăiește memoria: CPU sau GPU).

Pentru manipularea dimensiunilor fără alocări redundante de memorie, .view() creează o nouă vizualizare a aceluiași buffer de memorie, în timp ce .squeeze() elimină dimensiunile de mărime 1, iar .unsqueeze() adaugă o nouă axă (esențial pentru adăugarea dimensiunii de batch).

Cum să o reții ușor

💡 Dacă o listă Python este un șirag simplu de mărgele, un tensor este o structură de cub rubik multidimensional din titan care poate fi rotită instantaneu pe orice axă și procesată în paralel de mii de nuclee GPU.

Opțiuni și parametri tehnici

  • torch.tensor(data, dtype=None, device=None): convertește liste sau array-uri NumPy în tensori.
  • tensor.shape / tensor.size(): returnează tuplul dimensiunilor (ex: torch.Size([32, 128, 768])).
  • tensor.view(*shape): rearanjează dimensiunile dacă tensorul este contiguu în memorie.
  • tensor.contiguous(): forțează rearanjarea contiguă a memoriei dacă .view() dă eroare după operațiuni de transpunere (.transpose() sau .permute()).

Exemple practice și cazuri de utilizare

  • Adăugarea dimensiunii de batch (de la [768] la [1, 768]): x_batch = x.unsqueeze(0)
  • Conversie bidirecțională între PyTorch și NumPy: arr_np = tensor.numpy(); t = torch.from_numpy(arr_np) (partajează aceeași memorie pe CPU!).
  • Verificarea memoriei contigue: x.is_contiguous()

Sfaturi de configurare & capcane

Folosește întotdeauna .reshape() dacă nu ești sigur de starea de contiguitate a memoriei — .reshape() va apela automat .view() dacă este posibil sau .contiguous().view() dacă tensorul a fost rotit.

Comenzi și ghiduri înrudite