Класс PoissonNLLLoss
Класс PoissonNLLLoss вычисляет отрицательную логарифмическую
правдоподобность для распределения Пуассона. Первым параметром
конструктор принимает флаг log_input, который указывает,
передаются ли входные значения в логарифмическом масштабе.
Вторым параметром можно передать флаг full, который
включает вычисление полной логарифмической правдоподобности.
Третьим параметром задаётся вес для каждого элемента потерь.
Четвёртым параметром указывается режим редукции потерь.
Синтаксис
torch.nn.PoissonNLLLoss(log_input=True, full=False, weight=None, reduction='mean')
Параметры:
-
log_input- еслиTrue, то входные значения считаются логарифмом от ожидаемых значений; еслиFalse, то входные значения считаются непосредственно ожидаемыми значениями -
full- еслиTrue, то в потери добавляется членlog(target!), что даёт полную логарифмическую правдоподобность -
weight- тензор весов для каждого элемента -
reduction- режим редукции потерь:'none','mean'или'sum'
Пример с log_input=True
Создадим функцию потерь и применим её к тензорам с логарифмами ожидаемых значений:
import torch
criterion = torch.nn.PoissonNLLLoss(log_input=True)
input = torch.tensor([1.5, 2.0, 3.2])
target = torch.tensor([2, 3, 4])
loss = criterion(input, target)
print(loss)
Результат выполнения кода:
tensor(0.3938)
Пример с log_input=False
Применим функцию потерь к тензорам с ожидаемыми значениями, а не с логарифмами:
import torch
criterion = torch.nn.PoissonNLLLoss(log_input=False)
input = torch.tensor([4.0, 5.0, 6.0])
target = torch.tensor([3, 4, 5])
loss = criterion(input, target)
print(loss)
Результат выполнения кода:
tensor(0.5819)
Пример с full=True
Используем флаг full для включения полной логарифмической
правдоподобности:
import torch
criterion = torch.nn.PoissonNLLLoss(log_input=True, full=True)
input = torch.tensor([0.5, 1.0, 1.5])
target = torch.tensor([1, 2, 3])
loss = criterion(input, target)
print(loss)
Результат выполнения кода:
tensor(0.8904)
Пример с reduction='none'
Установим режим редукции 'none' для получения поэлементных
потерь:
import torch
criterion = torch.nn.PoissonNLLLoss(log_input=True, reduction='none')
input = torch.tensor([1.2, 2.3, 3.4])
target = torch.tensor([2, 3, 4])
loss = criterion(input, target)
print(loss)
Результат выполнения кода:
tensor([-0.8109, -0.3942, 0.0916])
Пример с весами
Применим веса для каждого элемента потерь:
import torch
weight = torch.tensor([0.5, 1.0, 2.0])
criterion = torch.nn.PoissonNLLLoss(log_input=True, weight=weight)
input = torch.tensor([1.0, 2.0, 3.0])
target = torch.tensor([1, 2, 3])
loss = criterion(input, target)
print(loss)
Результат выполнения кода:
tensor(0.2593)
Смотрите также
-
класс
NLLLoss,
который вычисляет отрицательную логарифмическую правдоподобность для классификации -
класс
CrossEntropyLoss,
который объединяет LogSoftmax и NLLLoss -
класс
GaussianNLLLoss,
который вычисляет потерю для гауссовского распределения -
класс
KLDivLoss,
который вычисляет дивергенцию Кульбака-Лейблера