Класс NLLLoss
Класс NLLLoss вычисляет отрицательную логарифмическую
вероятность (Negative Log Likelihood Loss) между входными
данными и целевыми метками. Он часто используется как функция
потерь в задачах классификации, когда выходной слой модели
выдает логарифмические вероятности (обычно после LogSoftmax).
Входной тензор должен содержать логарифмические вероятности для
каждого класса, а целевой тензор - индексы истинных классов.
Параметр weight позволяет задать веса для классов,
а reduction определяет способ агрегации потерь.
Синтаксис
torch.nn.NLLLoss(weight=None, reduction='mean')
Параметры:
weight - тензор весов для классов.
reduction - способ агрегации потерь:
'none' (без агрегации), 'mean' (среднее), 'sum' (сумма).
Пример
Давайте создадим тензор с логарифмическими вероятностями и целевые метки, затем вычислим потерю NLLLoss:
import torch
# Создаем тензор логарифмических вероятностей
log_probs = torch.tensor([
[-0.5, -1.2, -2.1],
[-1.1, -0.3, -1.8],
])
# Целевые метки
target = torch.tensor([0, 1])
# Создаем функцию потерь
loss_fn = torch.nn.NLLLoss()
# Вычисляем потерю
res = loss_fn(log_probs, target)
print(res)
Результат выполнения кода:
tensor(0.4000)
Пример
Используем параметр weight для задания весов классов:
import torch
# Логарифмические вероятности
log_probs = torch.tensor([
[-0.5, -1.2, -2.1],
[-1.1, -0.3, -1.8],
])
target = torch.tensor([0, 1])
# Веса для классов
weights = torch.tensor([0.5, 1.0, 0.2])
# Создаем функцию потерь с весами
loss_fn = torch.nn.NLLLoss(weight=weights)
# Вычисляем потерю
res = loss_fn(log_probs, target)
print(res)
Результат выполнения кода:
tensor(0.4000)
Пример
Используем параметр reduction со значением 'none':
import torch
# Логарифмические вероятности
log_probs = torch.tensor([
[-0.5, -1.2, -2.1],
[-1.1, -0.3, -1.8],
])
target = torch.tensor([0, 1])
# Функция потерь без агрегации
loss_fn = torch.nn.NLLLoss(reduction='none')
# Вычисляем потерю для каждого элемента
res = loss_fn(log_probs, target)
print(res)
Результат выполнения кода:
tensor([0.5000, 0.3000])
Смотрите также
-
функцию потерь
CrossEntropyLoss,
которая объединяет LogSoftmax и NLLLoss -
функцию потерь
BCELoss,
которая вычисляет бинарную кросс-энтропию -
оптимизатор
Adam,
который часто используется для обучения моделей -
функцию потерь
KLDivLoss,
которая вычисляет дивергенцию Кульбака-Лейблера