Couches, pertes et boucle
Sequential, logits et zero-grad-step.
Empiler et optimiser
import torch
from torch import nn
net = nn.Sequential(nn.Linear(2, 32), nn.ReLU(), nn.Linear(32, 1))
opt = torch.optim.Adam(net.parameters(), lr=1e-3)
loss_fn = nn.BCEWithLogitsLoss() # binaire sur logits (sorties brutes, pas de sigmoïde avant)
# multiclasse : nn.CrossEntropyLoss() sur logits (pas de softmax avant)
net.train() # active dropout/norm ; net.eval() + torch.no_grad() en test
opt.zero_grad(); loss = loss_fn(net(Xb), yb); loss.backward(); opt.step()
Logit = score brut ; la loss fusionnée (BCEWithLogitsLoss, CrossEntropyLoss) applique sigmoïde/softmax en interne, stablement. zero_grad vide les gradients avant chaque backward : sans lui, ils s'accumulent.
Lots
from torch.utils.data import TensorDataset, DataLoader
loader = DataLoader(TensorDataset(Xt, yt), batch_size=32, shuffle=True)
batch_size 32-256, shuffle sur train seul. L'atelier suivant ne fera qu'enchaîner ces lignes en 50 époques avec meilleur modèle sur val.
Pas de correction en ligneConfrontez votre code aux résultats attendus du cours.