评价此页

GaussianNLLLoss#

class torch.nn.modules.loss.GaussianNLLLoss(*, full=False, eps=1e-06, reduction='mean')[源代码]#

高斯负对数似然损失。

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

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,或者维度少一个(其他所有尺寸相同)才能正确广播。

参数
  • 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 的截断对于自动微分(autograd)是忽略的,因此梯度不受其影响。

参考

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)[源代码]#

执行前向传播。

返回类型

张量