Évaluation des modèles à sorties multiples et pondération des pertes

Apprentissage profond intermédiaire avec PyTorch

Michal Oleszak

Machine Learning Engineer

Évaluation du modèle

acc_alpha = Accuracy(
    task="multiclass", num_classes=30
)
acc_char = Accuracy(
    task="multiclass", num_classes=964
)


net.eval() with torch.no_grad(): for images, labels_alpha, labels_char \ in dataloader_test: out_alpha, out_char = net(images)
_, pred_alpha = torch.max(out_alpha, 1) _, pred_char = torch.max(out_char, 1)
acc_alpha(pred_alpha, labels_alpha) acc_char(pred_char, labels_char)
  • Configurer une métrique par sortie
  • Parcourir le jeu de test et obtenir les sorties
  • Calculer la prédiction pour chaque sortie
  • Mettre à jour les métriques de précision
  • Calculer les scores finaux de précision
print(f"Alphabet: {acc_alpha.compute()}")
print(f"Character: {acc_char.compute()}")
Alphabet: 0.3166305720806122
Character: 0.24064336717128754
Apprentissage profond intermédiaire avec PyTorch

Boucle d'entraînement multi-sorties : rappel

for epoch in range(10):
    for images, labels_alpha, labels_char \
    in dataloader_train:
        optimizer.zero_grad()
        outputs_alpha, outputs_char = net(images)
        loss_alpha = criterion(
          outputs_alpha, labels_alpha
        )
        loss_char = criterion(
          outputs_char, labels_char
        )
        loss = loss_alpha + loss_char
        loss.backward()
        optimizer.step()
  • Deux pertes : alphabet et caractères
  • Perte finale = somme des pertes alphabet et caractères : loss = loss_alpha + loss_char
  • Les deux tâches de classification sont jugées aussi importantes
Apprentissage profond intermédiaire avec PyTorch

Faire varier l'importance des tâches

La classification des caractères compte 2 fois plus que celle de l'alphabet

  • Approche 1 : multiplier la perte la plus importante par 2

    loss = loss_alpha + loss_char * 2
    
  • Approche 2 : attribuer des poids qui totalisent 1

    loss = 0.33 * loss_alpha + 0.67 * loss_char
    
Apprentissage profond intermédiaire avec PyTorch

Attention : pertes sur des échelles différentes

  • Les pertes doivent être sur la même échelle avant pondération et addition
  • Exemples de tâches :

    • Prédire le prix d'une maison -> perte MSE
    • Prédire la qualité : faible, moyenne, élevée -> perte CrossEntropy
  • CrossEntropy est généralement à un chiffre

  • La perte MSE peut atteindre des dizaines de milliers
  • Le modèle ignorerait la tâche d'évaluation de la qualité
  • Solution : normaliser les deux pertes avant de pondérer et additionner
    loss_price = loss_price / torch.max(loss_price)
    loss_quality = loss_quality / torch.max(loss_quality)
    loss = 0.7 * loss_price + 0.3 * loss_quality
    
Apprentissage profond intermédiaire avec PyTorch

Passons à la pratique !

Apprentissage profond intermédiaire avec PyTorch

Preparing Video For Download...