评价此页

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.}

其中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,或与输入形状相同但少一个维度(允许广播),或为标量值

  • 输出:如果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()

注意

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。

forward(input, target, var)[source]#

执行前向传播。

返回类型

张量