Функция torch.nn.NLLLoss в PyTorch
Справочное руководство PyTorch torch.nn
torch.nn.NLLLossЭто отрицательная логарифмическая функция потерь в PyTorch.
Он используется для задач многоклассовой классификации и должен использоваться вместе с LogSoftmax.
Определение функции
torch.nn.NLLLoss(weight=None, ignore_index=-100, reduction='mean')
Примеры использования
Пример 1: Базовое использование
Пример
import torch
import torch.nn as nn
# Сначала LogSoftmax, затем NLLLoss
log_softmax = nn.LogSoftmax(dim=1)
nll = nn.NLLLoss()
# Выход модели (логиты)
logits = torch.randn(4, 10)
# После log softmax
log_probs = log_softmax(logits)
# Истинные метки
targets = torch.tensor([2, 5, 1, 7])
loss = nll(log_probs, targets)
print("Потеря NLL:", loss.item())
import torch.nn as nn
# Сначала LogSoftmax, затем NLLLoss
log_softmax = nn.LogSoftmax(dim=1)
nll = nn.NLLLoss()
# Выход модели (логиты)
logits = torch.randn(4, 10)
# После log softmax
log_probs = log_softmax(logits)
# Истинные метки
targets = torch.tensor([2, 5, 1, 7])
loss = nll(log_probs, targets)
print("Потеря NLL:", loss.item())
Пример 2: эквивалентно CrossEntropyLoss
Пример
import torch
import torch.nn as nn
logits = torch.randn(4, 10)
targets = torch.tensor([2, 5, 1, 7])
# Метод 1: использовать CrossEntropyLoss напрямую
loss1 = nn.CrossEntropyLoss()(logits, targets)
# Метод 2: LogSoftmax + NLLLoss
loss2 = nn.NLLLoss()(nn.LogSoftmax(dim=1)(logits), targets)
print("CrossEntropyLoss:", loss1.item())
print("LogSoftmax + NLLLoss:", loss2.item())
print("Результаты совпадают:", abs(loss1 - loss2) < 1e-5)
import torch.nn as nn
logits = torch.randn(4, 10)
targets = torch.tensor([2, 5, 1, 7])
# Метод 1: использовать CrossEntropyLoss напрямую
loss1 = nn.CrossEntropyLoss()(logits, targets)
# Метод 2: LogSoftmax + NLLLoss
loss2 = nn.NLLLoss()(nn.LogSoftmax(dim=1)(logits), targets)
print("CrossEntropyLoss:", loss1.item())
print("LogSoftmax + NLLLoss:", loss2.item())
print("Результаты совпадают:", abs(loss1 - loss2) < 1e-5)
Сценарии использования
- Многоклассовая классификация: Используется с LogSoftmax
- Пользовательская функция потерь: Особые требования
Примечание: CrossEntropyLoss уже включает LogSoftmax, поэтому обычно используется напрямую.
Другие расширения