GaussianNLLLoss
CLASStorch.nn.GaussianNLLLoss(*, full=False, eps=1e-06, reduction='mean')
高斯负对数似然函数。
target 被视为高斯分布的样本,其期望和方差由神经网络预测给出。对于一个 target
张量建模为具有高斯分布的张量的期望值input
和张量的正方差var
,其损失为:
l
o
s
s
=
1
2
(
log
(
m
a
x
(
v
a
r
,
e
p
s
)
)
+
(
i
n
p
u
t
−
t
a
r
g
e
t
)
2
m
a
x
(
v
a
r
,
e
p
s
)
)
+
c
o
n
s
t
.
loss={\frac{1}{2}}\left(\log{(\mathrm{max}\left(\mathrm{var},\,\,\mathrm{eps}\right)})+{\frac{\left(\mathrm{input}-\mathrm{target}\right)^{2}}{\mathrm{max}\left(\mathrm{var},\,\,\mathrm{eps}\right)}}\right)+\mathrm{const.}
loss=21(log(max(var,eps))+max(var,eps)(input−target)2)+const.
其中eps
是用于稳定的。默认情况下,损失函数的常数项是省略的,除非full
是True
。如果var
与input
的大小不一样(由于同方差的假设),它必须有一个最终维度为1或者少一个维度(所有其他大小都一样)才能正确广播。
参数:
full (bool, optional) - 在损失计算中包括常数项。默认情况下。False。
eps (float, optional) - 用于钳制var的值(见下面的注释),以保证稳定性。默认值:1e-6。
reduction (str, optional) - 指定应用于输出的归约方式:none
| mean
| sum
. none
: 不会应用减法,mean
: 输出是所有批次成员损失的平均值,‘sum’: 输出是所有批次成员损失的总数。默认:mean
。
形状:
Input: ( N , ∗ ) (N, *) (N,∗)或 ( ∗ ) (*) (∗),其中 ∗ * ∗表示任何数量的额外维度
target: ( N , ∗ ) (N, *) (N,∗)或 ( ∗ ) (*) (∗),与输入的形状相同,或与输入的形状相同但有一个维度等于1(允许广播)。
Var: ( N , ∗ ) (N, *) (N,∗)或 ( ∗ ) (*) (∗),与输入的形状相同,或与输入的形状相同但有一个维度等于1,或与输入的形状相同但少一个维度(允许广播)。
output:如果还原是 “平均值”(默认)或 “总和”,则为标量。如果还原是’无’,则是 ( N , ∗ ) (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) # 异方差
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) # 同方差
output = loss(input, target, var)
output.backward()