Clasa nn.Module: Crearea Arhitecturilor Neuronale în Python în PyTorch & Deep Learning Practic

Clasa de bază pe care o moștenește orice rețea neuronală în PyTorch: definirea straturilor în constructorul __init__ și a fluxului de date în metoda forward().

Sintaxă & invocare Python
import torch.nn as nn

class ReteaClasificare(nn.Module):
    def __init__(self, intrare_dim: int, clase_dim: int):
        super().__init__()
        self.strat_ascuns = nn.Linear(intrare_dim, 128)
        self.activare = nn.GELU()
        self.iesire = nn.Linear(128, clase_dim)

    def forward(self, x):
        x = self.activare(self.strat_ascuns(x))
        return self.iesire(x)   # Nu apela niciodată model.forward(x), ci model(x)!

Descriere & Utilizare

În PyTorch, orice arhitectură neuronală — de la un perceptron cu două straturi până la cel mai complex model Transformer de 70 de miliarde de parametri — este o clasă Python care moștenește din torch.nn.Module.

Structura standard este compusă din două părți: în __init__() apelezi super().__init__() și definești toate straturile care conțin parametri învățabili (greutăți și bias-uri, cum ar fi nn.Linear sau nn.Embedding). În metoda forward(self, x) definești cum circulă tensorul de intrare prin aceste straturi.

Un detaliu arhitectural esențial: nu apela niciodată direct metoda model.forward(x)! Apelează întotdeauna instanța ca pe o funcție: model(x). Clasa de bază nn.Module implementează metoda specială __call__, care se ocupă automat de înregistrarea hook-urilor de depanare și de profiling.

Cum să o reții ușor

💡 Constructorul __init__ este atelierul în care cumperi și montezi utilajele pe podea, iar metoda forward() este banda rulantă pe care intră materia primă (x) și este prelucrată pe rând de fiecare utilaj până la produsul finit.

Opțiuni și parametri tehnici

  • super().__init__(): obligatoriu pe prima linie din constructor pentru a inițializa mecanismele interne de înregistrare a parametrilor.
  • self.parameters(): iterator peste toți tensorii cu greutăți învățabile din model (pasat direct către optimizator).
  • self.named_parameters(): returnează perechi (nume, tensor), util pentru aplicarea de weight decay diferențiat.
  • model.to(device): mută toate straturile interne pe GPU dintr-o singură comandă.

Exemple practice și cazuri de utilizare

  • Aflarea numărului total de parametri ai modelului: total_param = sum(p.numel() for p in model.parameters() if p.requires_grad)
  • Comutarea între antrenare și inferență: model.train() vs model.eval().
  • Împachetarea rapidă fără clasă dedicată: folosește nn.Sequential(nn.Linear(10, 20), nn.ReLU(), nn.Linear(20, 2)) pentru rețele simple fără ramificări.

Sfaturi de configurare & capcane

Dacă creezi o listă de straturi într-o buclă for, folosește nn.ModuleList([...]) în locul unei liste Python standard [...] — o listă Python obișnuită nu își înregistrează parametrii în PyTorch, iar aceștia nu vor fi antrenați!

Comenzi și ghiduri înrudite