PyTorch中log_softmax的CrossEntropyLoss和NNLLoss之间的区别



当我在PyTorch中构建分类器时,我有两个选项可以进行

  1. 在不修改模型的情况下使用nn.CrossEntropyLoss
  2. 使用添加了F.log_softmaxnn.NNLLoss作为模型中的最后一层

所以有两种方法。

现在,任何人都应该使用什么方法,为什么?

它们是一样的。

如果检查实现,您会发现它在对传入参数应用log_softmax之后调用nll_loss

return nll_loss(log_softmax(input, 1), target, weight, None, ignore_index, None, reduction)

Edit:看起来链接现在断了,下面是显示相同信息的C++实现。

交叉熵和对数似然都是对同一公式的两种不同解释。在对数似然的情况下,我们最大化正确类的概率(实际似然(,这与最小化交叉熵相同。虽然你是对的,但这两个都在文献中造成了一些歧义,然而,也有一些微妙之处和注意事项,我强烈建议你仔细阅读这篇文章,因为这个话题已经在那里进行了严格的讨论。你可能会发现它很有用。

输出层中的交叉熵或对数似然

相关内容

  • 没有找到相关文章

最新更新