nn.NLLLoss
NLLLoss: negative log likelihood loss,负对数似然损失。
公式为: ℓ ( x , y ) = L = { l 1 , … , l N } ⊤ , l n = − x n y n \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)