nn.NLLLoss

NLLLoss: negative log likelihood loss,负对数似然损失。

公式为: ℓ(x,y)=L={l1,…,lN}⊤,ln=−xnyn\ell(x, y) = L = \{l_1,\dots,l_N\}^\top, \quad l_n = - x_ny_n\quad(x,y)=L={l1,,lN},ln=xnyn

确实没搞清楚这个公式跟对数有什么关系,看公式就是取每行对应列别的值

import torch
# 预测值
predict = torch.Tensor([[0.5796, 0.4403, 0.9087],
                        [-1.5673, -0.3150, 1.6660]])
# 真实值
target = torch.tensor([0, 2])

result = 0
for i, j in enumerate(range(target.shape[0])):
    # 分别取出0.5796和1.6660
    # 也就是log_soft_out[0][0]和log_soft_out[1][2]
    result -= predict[i][target[j]]
print(result / target.shape[0])
# tensor(-1.1228)

loss = torch.nn.NLLLoss()
print(loss(predict, target))
# tensor(-1.1228)

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐