Torch.nn.NLLLoss的全称是Negative Log Likelihood Loss。但是它容易欺骗人。因为它既没有Log计算,也没有Likelihood计算,甚至连loss感觉都不明显。NLLLoss(input, target)本质上只做2件事情: 将target中指定的…
NLLLoss就是做的就是这个工作:将目标类的prob拿出来,再取个负号。为什么要取负号?是因为目标类的prob希望越大越好——这是最大似然的思想,最大似然应该对应最小loss,因此取负号就是最小loss。 正如图中看到的,logsoftmax的目标类=-3.0728,取负号=3.0728,就是NLLLoss的输出,也是CrossEntropyLoss的输出 ...
类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。构造函数 constructor,它通过...
log_softmax 和 nll_loss 经常组合使用,常见于各种分类算法。 cross_entropy_loss 底层实际也是调用的 log_softmax 和 nll_loss。该算子一步到位的将 softmax、log 及 nll 操作全部完成。 b = torch.Tensor([ [1, 2], [0.5, 3], [0.9, 4] ]) loss = nn.CrossEntropyLoss() l1 = loss(b, torch...