Bucla Clasică de Antrenare (Training & Validation Loop) în PyTorch & Deep Learning Practic

Antrenare, Optimizare & Stare Nivel: intermediar

Șablonul canonic complet în Python pentru antrenarea și evaluarea unei rețele neuronale: alternarea între epoci, calculul metricilor și comutarea train() / eval().

Sintaxă & invocare Python
for epoca in range(numar_epoci):
    model.train()
    for batch_x, batch_y in train_loader:
        batch_x, batch_y = batch_x.to(device), batch_y.to(device)
        optimizator.zero_grad(set_to_none=True)
        predictii = model(batch_x)
        loss = criteriu(predictii, batch_y)
        loss.backward()
        optimizator.step()

Descriere & Utilizare

Spre deosebire de alte framework-uri mai rigide (precum Keras cu model.fit()), PyTorch pune controlul total în mâinile dezvoltatorului printr-o buclă explicită de antrenare în Python (Training Loop).

Bucla este formată din două iterații imbricate: bucla exterioară pe Epoci (Epochs) (de câte ori parcurge rețeaua întregul set de date) și bucla interioară pe Loturi (Batches) din DataLoader.

O buclă profesională include întotdeauna două faze distincte în fiecare epocă: Faza de Antrenare (cu model.train(), calcul de gradienți și actualizare cu optimizer.step()) și Faza de Validare (cu model.eval() și with torch.inference_mode(): pentru măsurarea erorii pe date nevăzute fără a modifica greutățile).

Cum să o reții ușor

💡 Este exact ca pregătirea unui sportiv: în fiecare săptămână (epocă) are zile de antrenament intens în care greșește și își ajustează tehnica (training), urmate de o probă de control fără ajutorul antrenorului (validation) pentru a vedea dacă s-a îmbunătățit cu adevărat.

Opțiuni și parametri tehnici

  • model.train(): activează comportamentul de antrenare pe straturile specifice (Dropout este activ, BatchNorm calculează statistici de lot).
  • model.eval(): îngheață statisticile de BatchNorm și oprește complet Dropout-ul.
  • Early Stopping: oprirea automată a antrenării dacă pierderea pe setul de validare nu mai scade timp de P epoci consecutive.

Exemple practice și cazuri de utilizare

  • Calculul pierderii medii pe epocă: pierdere_totala += loss.item() * batch_x.size(0); medie = pierdere_totala / len(dataset).
  • Salvarea automată a celui mai bun model (Best Checkpoint): salvează state_dict doar atunci când val_loss < best_val_loss.
  • Afișare bară de progres modernă cu tqdm: for batch in tqdm(train_loader, desc=f"Epoca {epoca}"): ...

Sfaturi de configurare & capcane

Nu uita să muți datele pe GPU în interiorul buclei (batch_x = batch_x.to(device))! Dacă transmiți date de pe CPU către un model aflat pe GPU, vei primi eroarea clasică de neconcordanță a dispozitivelor.

Comenzi și ghiduri înrudite