评价此页

GaussianNLLLoss#

class torch.nn.GaussianNLLLoss(*, full=False, eps=1e-06, reduction='mean')[source]#

高斯负对数似然损失。

目标被视为具有由神经网络预测的期望和方差的高斯分布的样本。对于一个 target 张量,该张量被建模为具有期望为 input 张量且方差为正的 var 张量,则损失为:

loss=12(log(max(var, eps))+(inputtarget)2max(var, eps))+const.\text{loss} = \frac{1}{2}\left(\log\left(\text{max}\left(\text{var}, \ \text{eps}\right)\right) + \frac{\left(\text{input} - \text{target}\right)^2} {\text{max}\left(\text{var}, \ \text{eps}\right)}\right) + \text{const.} const.

其中 eps 用于稳定性。默认情况下,除非 fullTrue,否则将省略损失函数的常数项。如果 var 的大小与 input 不同(由于同方差假设),则为了正确广播,它必须是最后一个维度为 1,或者比 input 少一个维度(且其他所有尺寸均相同)。

参数
  • full (bool, optional) – 是否在损失计算中包含常数项。默认为 False

  • eps (float, optional) – 用于对 var 进行裁剪(见下文注释)的值,用于稳定性。默认为 1e-6。

  • reduction (str, optional) – 指定应用于输出的缩减方式:'none' | 'mean' | 'sum''none':不进行缩减;'mean':输出为所有批次成员损失的平均值;'sum':输出为所有批次成员损失的总和。默认为 'mean'

形状
  • 输入:(N,)(N, *)()(*),其中 * 表示任何附加维度

  • 目标:(N,)(N, *)()(*),形状与输入相同,或形状与输入相同但有一个维度为 1(以便于广播)。

  • 方差:(N,)(N, *)()(*),形状与输入相同,或形状与输入相同但有一个维度为 1,或形状与输入相同但有一个维度少 1(以便于广播),或一个标量值。

  • 输出:如果 reduction'mean'(默认)或 'sum',则输出为标量。如果 reduction'none',则输出为 (N,)(N, *),与输入形状相同。

示例

>>> loss = nn.GaussianNLLLoss()
>>> input = torch.randn(5, 2, requires_grad=True)
>>> target = torch.randn(5, 2)
>>> var = torch.ones(5, 2, requires_grad=True)  # heteroscedastic
>>> output = loss(input, target, var)
>>> output.backward()
>>> loss = nn.GaussianNLLLoss()
>>> input = torch.randn(5, 2, requires_grad=True)
>>> target = torch.randn(5, 2)
>>> var = torch.ones(5, 1, requires_grad=True)  # homoscedastic
>>> output = loss(input, target, var)
>>> output.backward()

注意

autograd 会忽略对 var 的钳制,因此梯度不受其影响。

参考

Nix, D. A. and Weigend, A. S., “Estimating the mean and variance of the target probability distribution”, Proceedings of 1994 IEEE International Conference on Neural Networks (ICNN’94), Orlando, FL, USA, 1994, pp. 55-60 vol.1, doi: 10.1109/ICNN.1994.374138。