Optimiseurs, entraînement et évaluation

Deep learning 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 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
  • Pas de l’optimiseur : mise à jour des paramètres
Deep learning intermédiaire avec PyTorch

Fonctionnement d’un optimiseur

 

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

Deep learning intermédiaire avec PyTorch

Fonctionnement d’un optimiseur

 

Des flèches montrent comment les deux vecteurs (paramètres et gradients) entrent dans l’optimiseur, dessiné comme une cible.

Deep learning intermédiaire avec PyTorch

Fonctionnement d’un optimiseur

 

Une flèche depuis l’optimiseur pointe vers un vecteur de deux mises à jour : -0,5 et 0,5.

Deep learning intermédiaire avec PyTorch

Fonctionnement d’un optimiseur

 

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

Deep learning intermédiaire avec PyTorch

Fonctionnement d’un optimiseur

 

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

Deep learning intermédiaire avec PyTorch

Descente de gradient stochastique (SGD)

optimizer = optim.SGD(net.parameters(), lr=0.01)
  • Mise à jour dépend du taux d’apprentissage
  • Simple et efficace pour des modèles basiques
  • Peu utilisé en pratique
Deep learning intermédiaire avec PyTorch

Gradient adaptatif (Adagrad)

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

Propag. des moyennes quadratiques (RMSprop)

optimizer = optim.RMSprop(net.parameters(), lr=0.01)
  • Mise à jour par paramètre selon la taille de ses gradients précédents
Deep learning 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 + momentum des gradients
  • Souvent l’optimiseur par défaut
Deep learning 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 éval. et itérer sur les lots test sans gradients
  • Passer les données au modèle pour obtenir les probabilités prédites
  • Calculer les étiquettes prédites
  • Mettre à jour la métrique d’exactitude
Deep learning intermédiaire avec PyTorch

Passons à la pratique !

Deep learning intermédiaire avec PyTorch

Preparing Video For Download...