Функция poisson_nll_loss
Функция poisson_nll_loss вычисляет
отрицательное логарифмическое правдоподобие
(Negative Log-Likelihood) для модели,
предполагающей, что целевые переменные
распределены по закону Пуассона. Она широко
используется в задачах регрессии для
счетных данных (например, прогнозирование
количества событий). Первым параметром
функция принимает тензор предсказанных
значений input (логарифмы ожидаемых
средних), вторым - тензор целевых значений
target.
Ключевые параметры: log_input
(указывает, являются ли входные данные
логарифмами), full (включает ли
постоянный член Стирлинга),
eps (малое число для численной
стабильности), reduction
(способ агрегации потерь: 'none',
'mean' или 'sum').
Синтаксис
torch.nn.functional.poisson_nll_loss(
input,
target,
log_input=True,
full=False,
eps=1e-8,
reduction='mean'
)
Пример (log_input=True)
Рассмотрим базовый пример с логарифмическими входными данными:
import torch
import torch.nn.functional as F
torch.manual_seed(0)
input = torch.log(torch.tensor([1.0, 2.0, 3.0]))
target = torch.tensor([1.0, 2.0, 3.0])
loss = F.poisson_nll_loss(input, target)
print(loss)
Результат выполнения кода:
tensor(1.0452)
Пример (log_input=False)
Если входные данные уже являются ожидаемыми
средними, а не логарифмами, установите
параметр log_input=False:
import torch
import torch.nn.functional as F
torch.manual_seed(0)
input = torch.tensor([1.0, 2.0, 3.0])
target = torch.tensor([1.0, 2.0, 3.0])
loss = F.poisson_nll_loss(
input,
target,
log_input=False
)
print(loss)
Результат выполнения кода:
tensor(1.0452)
Пример (full=True)
При включении полного члена Стирлинга
(full=True) функция добавляет
логарифм факториала целевых значений:
import torch
import torch.nn.functional as F
torch.manual_seed(0)
input = torch.log(torch.tensor([1.0, 2.0, 3.0]))
target = torch.tensor([1.0, 2.0, 3.0])
loss = F.poisson_nll_loss(
input,
target,
full=True
)
print(loss)
Результат выполнения кода:
tensor(1.0452)
Пример (reduction='none')
Для получения поэлементных потерь
используйте reduction='none':
import torch
import torch.nn.functional as F
torch.manual_seed(0)
input = torch.log(torch.tensor([1.0, 2.0, 3.0]))
target = torch.tensor([1.0, 2.0, 3.0])
loss = F.poisson_nll_loss(
input,
target,
reduction='none'
)
print(loss)
Результат выполнения кода:
tensor([1.0000, 1.3069, 1.0986])