Optimiseurs, entraînement et évaluation

Apprentissage profond intermédiaire avec PyTorch

Michal Oleszak

Machine Learning Engineer

Boucle d'entraînement

import torch.nn as nn
import torch.optim as optim

criterion = nn.BCELoss()
optimizer = optim.SGD(net.parameters(), lr=0.01)


for epoch in range(1000): for features, labels in dataloader_train:
optimizer.zero_grad()
outputs = net(features)
loss = criterion( outputs, labels.view(-1, 1) )
loss.backward()
optimizer.step()
  • Définir la fonction de perte et l'optimiseur
    • BCELoss pour la classification binaire
    • Optimiseur SGD
  • Itérer sur les époques et les lots d'entraînement
  • Réinitialiser les gradients
  • Passage avant : obtenir les sorties du modèle
  • Calculer la perte
  • Calculer les gradients
  • Étape de l'optimiseur : mettre à jour les paramètres
Apprentissage profond intermédiaire avec PyTorch

Fonctionnement d'un optimiseur

 

Deux vecteurs de longueur deux : l'un avec des valeurs de paramètres (1 et 0,5), l'autre avec des gradients (0,9 et -0,2).

Apprentissage profond intermédiaire avec PyTorch

Fonctionnement d'un optimiseur

 

Des flèches montrent comment les deux vecteurs (paramètres et gradients) sont transmis à l'optimiseur, représenté par une cible.

Apprentissage profond intermédiaire avec PyTorch

Fonctionnement d'un optimiseur

 

Une flèche partant de l'optimiseur pointe vers un vecteur avec deux mises à jour de paramètres : -0,5 et 0,5.

Apprentissage profond intermédiaire avec PyTorch

Fonctionnement d'un optimiseur

 

Des flèches partant des mises à jour de paramètres pointent vers les nouvelles valeurs des paramètres : 0,5 et 1,0.

Apprentissage profond intermédiaire avec PyTorch

Fonctionnement d'un optimiseur

 

Des flèches partant des mises à jour de paramètres pointent vers les nouvelles valeurs des paramètres : 0,5 et 1,0.

Apprentissage profond intermédiaire avec PyTorch

Descente de gradient stochastique (SGD)

optimizer = optim.SGD(net.parameters(), lr=0.01)
  • La mise à jour dépend du taux d'apprentissage
  • Simple et efficace pour des modèles de base
  • Rarement utilisé en pratique
Apprentissage profond intermédiaire avec PyTorch

Gradient adaptatif (Adagrad)

optimizer = optim.Adagrad(net.parameters(), lr=0.01)
  • Adapte le taux d'apprentissage pour chaque paramètre
  • Bon pour les données clairsemées
  • Peut réduire le taux d'apprentissage trop vite
Apprentissage profond intermédiaire avec PyTorch

Propagation RMS (RMSprop)

optimizer = optim.RMSprop(net.parameters(), lr=0.01)
  • Met à jour chaque paramètre selon l'ampleur de ses gradients précédents
Apprentissage profond intermédiaire avec PyTorch

Estimation des moments adaptatifs (Adam)

optimizer = optim.Adam(net.parameters(), lr=0.01)
  • Probablement le plus polyvalent et le plus utilisé
  • RMSprop + moment du gradient
  • Souvent l'optimiseur de référence
Apprentissage profond intermédiaire avec PyTorch

Évaluation du modèle

from torchmetrics import Accuracy

acc = Accuracy(task="binary")


net.eval() with torch.no_grad(): for features, labels in dataloader_test:
outputs = net(features)
preds = (outputs >= 0.5).float()
acc(preds, labels.view(-1, 1))
accuracy = acc.compute() print(f"Accuracy: {accuracy}")
Accuracy: 0.6759443283081055
  • Configurer la métrique d'exactitude
  • Mettre le modèle en mode évaluation et parcourir les lots de test sans gradients
  • Passer les données au modèle pour obtenir les probabilités prévues
  • Calculer les étiquettes prévues
  • Mettre à jour la métrique d'exactitude
Apprentissage profond intermédiaire avec PyTorch

Passons à la pratique !

Apprentissage profond intermédiaire avec PyTorch

Preparing Video For Download...