Fonction torch.nn.NLLLoss de PyTorch
Manuel de référence torch.nn de PyTorch
torch.nn.NLLLossEst la perte de log-vraisemblance négative dans PyTorch.
Il est utilisé pour les tâches de classification multi-classes et doit être utilisé avec LogSoftmax.
Définition de fonction
torch.nn.NLLLoss(weight=None, ignore_index=-100, reduction='mean')
Exemples d'utilisation
Exemple 1 : Utilisation de base
Exemple
import torch
import torch.nn as nn
# D'abord LogSoftmax, puis NLLLoss
log_softmax = nn.LogSoftmax(dim=1)
nll = nn.NLLLoss()
# Sortie du modèle (logits)
logits = torch.randn(4, 10)
# Après log softmax
log_probs = log_softmax(logits)
# Étiquettes réelles
targets = torch.tensor([2, 5, 1, 7])
loss = nll(log_probs, targets)
print("Perte NLL :", loss.item())
import torch.nn as nn
# D'abord LogSoftmax, puis NLLLoss
log_softmax = nn.LogSoftmax(dim=1)
nll = nn.NLLLoss()
# Sortie du modèle (logits)
logits = torch.randn(4, 10)
# Après log softmax
log_probs = log_softmax(logits)
# Étiquettes réelles
targets = torch.tensor([2, 5, 1, 7])
loss = nll(log_probs, targets)
print("Perte NLL :", loss.item())
Exemple 2 : équivalent à CrossEntropyLoss
Exemple
import torch
import torch.nn as nn
logits = torch.randn(4, 10)
targets = torch.tensor([2, 5, 1, 7])
# Méthode 1 : utiliser CrossEntropyLoss directement
loss1 = nn.CrossEntropyLoss()(logits, targets)
# Méthode 2 : LogSoftmax + NLLLoss
loss2 = nn.NLLLoss()(nn.LogSoftmax(dim=1)(logits), targets)
print("CrossEntropyLoss:", loss1.item())
print("LogSoftmax + NLLLoss:", loss2.item())
print("Les résultats sont identiques :", abs(loss1 - loss2) < 1e-5)
import torch.nn as nn
logits = torch.randn(4, 10)
targets = torch.tensor([2, 5, 1, 7])
# Méthode 1 : utiliser CrossEntropyLoss directement
loss1 = nn.CrossEntropyLoss()(logits, targets)
# Méthode 2 : LogSoftmax + NLLLoss
loss2 = nn.NLLLoss()(nn.LogSoftmax(dim=1)(logits), targets)
print("CrossEntropyLoss:", loss1.item())
print("LogSoftmax + NLLLoss:", loss2.item())
print("Les résultats sont identiques :", abs(loss1 - loss2) < 1e-5)
Cas d'utilisation
- Classification multi-classes: Utilisée avec LogSoftmax
- Perte personnalisée: Exigences spéciales
Remarque : CrossEntropyLoss inclut déjà LogSoftmax, donc elle est généralement utilisée directement.
Autres extensions