快捷方式

GaussianNLLLoss

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

高斯负对数似然损失。

目标被视为来自具有神经网络预测的期望值和方差的高斯分布的样本。对于一个建模为具有期望值张量 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或比input少一个维度(其他所有大小相同)。

参数
  • full (bool, 可选) – 包含损失计算中的常数项。默认值:False

  • eps (float, 可选) – 用于钳位var(参见下面的说明),以确保稳定性。默认值:1e-6。

  • reduction (str, 可选) – 指定应用于输出的缩减操作:'none' | 'mean' | 'sum''none':不应用任何缩减操作,'mean':输出是所有批次成员损失的平均值,'sum':输出是所有批次成员损失的总和。默认值:'mean'

形状
  • 输入:(N,)(N, *)()(*) 其中*表示任意数量的其他维度

  • 目标:(N,)(N, *)()(*),与输入形状相同,或与输入形状相同但其中一个维度等于1(允许广播)

  • Var:(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. 和 Weigend, A. S.,“估计目标概率分布的均值和方差”,1994 年 IEEE 国际神经网络会议 (ICNN’94) 论文集,美国佛罗里达州奥兰多,1994 年,第 55-60 卷 1 页,doi:10.1109/ICNN.1994.374138。

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源