Propagation avant : de l'entrée à la prédiction

2 min

Objectif : suivre le calcul d'un réseau et distinguer entraînement et inférence.

La propagation avant (forward pass) applique chaque couche dans l'ordre. Elle produit les logits, puis la perte si les cibles sont disponibles. Elle ne modifie aucun poids.

python
logits = model(x)          # propagation avant
loss = criterion(logits, y)

Pour un batch x de forme (32, 20), une couche Linear(20, 64) donne (32, 64). Une seconde Linear(64, 4) donne (32, 4). L'axe batch est conservé ; le dernier axe change selon la couche.

Entraînement et inférence

En entraînement, le réseau conserve les informations nécessaires au calcul des gradients. En inférence, on désactive ce suivi et on place le modèle en mode évaluation :

python
model.eval()
with torch.inference_mode():
    logits = model(x)
    predictions = logits.argmax(dim=1)

model.eval() règle le comportement de Dropout et BatchNorm. inference_mode() évite la construction du graphe de gradient. Les deux opérations sont complémentaires.

Un calcul traçable

Un réseau est un graphe d'opérations. PyTorch mémorise quelles opérations ont produit chaque tenseur lorsque requires_grad=True. Cette trace sera parcourue en sens inverse par la rétropropagation.

Pièges

  • Utiliser argmax avant la fonction de perte : l'opération détruit l'information utile au gradient.
  • Oublier model.eval() pendant la validation.
  • Calculer la validation avec suivi des gradients et gaspiller la mémoire.

Vérification rapide

La propagation avant apprend-elle ? Pourquoi appeler à la fois eval() et inference_mode() ?

Réponses

Non, elle calcule. eval() change certaines couches ; inference_mode() désactive le graphe de gradient.

Activité de maîtrise — Contrat d'inférence

Écrivez un pseudo-test qui appelle deux fois le même modèle contenant dropout, d'abord en mode entraînement puis en mode évaluation. Prédisez quels résultats doivent être identiques et expliquez le rôle distinct de eval() et inference_mode(). Livrable : test et diagnostic.

Entraînement et inférence : deux parcours distincts

Lecture : la propagation avant calcule les sorties dans les deux cas, mais seul le parcours d'entraînement conserve ce qui est nécessaire au calcul des gradients. En inférence, combinez model.eval() et torch.inference_mode(). Le piège est de croire que l'un remplace l'autre : ils contrôlent des mécanismes différents.