NLLLOSS 是 negative log likelihood loss 负对数似然损失函数,CROSSENTROPYLOSS 是交叉熵损失函数,它们都是用于多分类任务的损失函数,正如我在笔记中提到的,它们实际上是一样的,在 Pytorch 中这两者的区别就只在于接收的输入不同:
torch.nn.functional.cross_entropy 将 logits 作为输入(内部自动实现 log_softmax)
torch.nn.functional.nll_loss 将 log-probabilities (log-softmax) 作为输入
logits 即 log_softmax 层的输入,log-probabilities 即 Softmax 层的输出,也就是说:
C
r
o
s
s
E
n
t
r
o
p
y
L
o
s
s
=
L
o
g
S
o
f
t
m
a
x
+
N
L
L
L
o
s
s
CrossEntropyLoss = LogSoftmax + NLLLoss
CrossEntropyLoss=LogSoftmax+NLLLoss
实际代码的演示如下:
1、假设 Softmax 层的输入矩阵为 Z,其中每一行是一个训练示例:
2、将它们经过 Softmax 层,得到输出矩阵 smax
3、nll_loss 的输入为 smax 的对数,即 log_softmax;而 cross_entropy 的输入为 Z



