快捷方式

GaussianNLLLoss

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

高斯负对数似然损失。

目标被视为来自高斯分布的样本,其期望和方差由神经网络预测。对于一个被建模为具有高斯分布的 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` 的钳制操作对于 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.

文档

访问 PyTorch 全面的开发者文档

查看文档

教程

获取针对初学者和高级开发者的深度教程

查看教程

资源

查找开发资源并获取问题解答

查看资源