Función PyTorch torch.nn.LogSoftmax
Manual de referencia de PyTorch torch.nn
torch.nn.LogSoftmaxEs la función de activación Log Softmax en PyTorch.
Es la forma logarítmica de Softmax, numéricamente más estable, y a menudo se usa junto con NLLLoss.
Definición de la función
torch.nn.LogSoftmax(dim=None)
Fórmula
LogSoftmax(x_i) = log(exp(x_i) / sum(exp(x_j)))
Ejemplo de uso
Ejemplo 1: Uso básico
Ejemplo
import torch
import torch.nn as nn
log_softmax = nn.LogSoftmax(dim=1)
logits = torch.tensor([[2.0, 1.0, 0.1]])
log_probs = log_softmax(logits)
print("Logits:", logits.tolist())
print("Log Softmax:", log_probs.tolist())
print("después de exp:", log_probs.exp().tolist())
import torch.nn as nn
log_softmax = nn.LogSoftmax(dim=1)
logits = torch.tensor([[2.0, 1.0, 0.1]])
log_probs = log_softmax(logits)
print("Logits:", logits.tolist())
print("Log Softmax:", log_probs.tolist())
print("después de exp:", log_probs.exp().tolist())
Ejemplo 2: Combinado con NLLLoss
Ejemplo
import torch
import torch.nn as nn
# Tarea de clasificación
logits = torch.randn(4, 10)
targets = torch.tensor([2, 5, 1, 7])
# LogSoftmax + NLLLoss = CrossEntropyLoss
loss = nn.NLLLoss()(nn.LogSoftmax(dim=1)(logits), targets)
print("NLL Loss:", loss.item())
# Equivalente a
loss2 = nn.CrossEntropyLoss()(logits, targets)
print("CrossEntropyLoss:", loss2.item())
import torch.nn as nn
# Tarea de clasificación
logits = torch.randn(4, 10)
targets = torch.tensor([2, 5, 1, 7])
# LogSoftmax + NLLLoss = CrossEntropyLoss
loss = nn.NLLLoss()(nn.LogSoftmax(dim=1)(logits), targets)
print("NLL Loss:", loss.item())
# Equivalente a
loss2 = nn.CrossEntropyLoss()(logits, targets)
print("CrossEntropyLoss:", loss2.item())
Ejemplo 3: Estabilidad numérica
Ejemplo
import torch
import torch.nn as nn
# logits de gran valor
logits = torch.tensor([[1000, 1001, 1002]])
# Softmax puede desbordarse
try:
sm = nn.Softmax(dim=1)(logits)
print("Softmax:", sm)
except:
print("Desbordamiento de Softmax")
# LogSoftmax es numéricamente estable
lsm = nn.LogSoftmax(dim=1)(logits)
print("LogSoftmax:", lsm)
import torch.nn as nn
# logits de gran valor
logits = torch.tensor([[1000, 1001, 1002]])
# Softmax puede desbordarse
try:
sm = nn.Softmax(dim=1)(logits)
print("Softmax:", sm)
except:
print("Desbordamiento de Softmax")
# LogSoftmax es numéricamente estable
lsm = nn.LogSoftmax(dim=1)(logits)
print("LogSoftmax:", lsm)
Casos de uso
- Tareas de clasificación: combinado con NLLLoss
- Estabilidad numérica: valores de logit grandes
Consejo: LogSoftmax + NLLLoss equivale a CrossEntropyLoss.
Otras extensiones