GaussianNLLLoss¶
- class torch.nn.GaussianNLLLoss(*, full=False, eps=1e-06, reduction='mean')[source]¶
高斯负对数似然损失。
目标被视为来自具有神经网络预测的期望值和方差的高斯分布的样本。对于一个建模为具有期望值张量
input
和正方差张量var
的高斯分布的目标张量target
,损失为) 2 max ( 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
用于稳定性。默认情况下,除非full
为True
,否则损失函数的常数项会被省略。如果var
的大小与input
不同(由于同方差假设),为了正确的广播,它必须具有最终维度为1或比input
少一个维度(其他所有大小相同)。- 参数
- 形状
输入: 或 其中表示任意数量的其他维度
目标: 或 ,与输入形状相同,或与输入形状相同但其中一个维度等于1(允许广播)
Var: 或 ,与输入形状相同,或与输入形状相同但其中一个维度等于1,或与输入形状相同但少一个维度(允许广播)
输出:如果
reduction
为'mean'
(默认)或'sum'
,则为标量。如果reduction
为'none'
,则为) (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。