Función PyTorch torch.nn.NLLLoss
Manual de referencia de PyTorch torch.nn
torch.nn.NLLLossEs la pérdida de log-verosimilitud negativa en PyTorch.
Se utiliza para tareas de clasificación múltiple y debe usarse con LogSoftmax.
Definición de la función
torch.nn.NLLLoss(weight=None, ignore_index=-100, reduction='mean')
Ejemplo de uso
Ejemplo 1: Uso básico
Ejemplo
import torch
import torch.nn as nn
# Primero LogSoftmax y luego NLLLoss
log_softmax = nn.LogSoftmax(dim=1)
nll = nn.NLLLoss()
# Salida del modelo (logits)
logits = torch.randn(4, 10)
# Después de log softmax
log_probs = log_softmax(logits)
# Etiquetas reales
targets = torch.tensor([2, 5, 1, 7])
loss = nll(log_probs, targets)
print("NLL Loss:", loss.item())
import torch.nn as nn
# Primero LogSoftmax y luego NLLLoss
log_softmax = nn.LogSoftmax(dim=1)
nll = nn.NLLLoss()
# Salida del modelo (logits)
logits = torch.randn(4, 10)
# Después de log softmax
log_probs = log_softmax(logits)
# Etiquetas reales
targets = torch.tensor([2, 5, 1, 7])
loss = nll(log_probs, targets)
print("NLL Loss:", loss.item())
Ejemplo 2: Equivalente a CrossEntropyLoss
Ejemplo
import torch
import torch.nn as nn
logits = torch.randn(4, 10)
targets = torch.tensor([2, 5, 1, 7])
# Forma 1: Usar CrossEntropyLoss directamente
loss1 = nn.CrossEntropyLoss()(logits, targets)
# Forma 2: LogSoftmax + NLLLoss
loss2 = nn.NLLLoss()(nn.LogSoftmax(dim=1)(logits), targets)
print("CrossEntropyLoss:", loss1.item())
print("LogSoftmax + NLLLoss:", loss2.item())
print("El resultado es el mismo:", abs(loss1 - loss2) < 1e-5)
import torch.nn as nn
logits = torch.randn(4, 10)
targets = torch.tensor([2, 5, 1, 7])
# Forma 1: Usar CrossEntropyLoss directamente
loss1 = nn.CrossEntropyLoss()(logits, targets)
# Forma 2: LogSoftmax + NLLLoss
loss2 = nn.NLLLoss()(nn.LogSoftmax(dim=1)(logits), targets)
print("CrossEntropyLoss:", loss1.item())
print("LogSoftmax + NLLLoss:", loss2.item())
print("El resultado es el mismo:", abs(loss1 - loss2) < 1e-5)
Casos de uso
- Clasificación múltiple: Combinar con LogSoftmax
- Pérdida personalizada: Necesidades especiales
Nota: CrossEntropyLoss ya incluye LogSoftmax, normalmente se usa directamente.
Otras extensiones