pytorch CrossEntropyLoss VS NULLLOSS 比较学习
文章申明:内容都不是原创内容,很多都是复制粘贴,本文的目的是自己学习和把学习的过程分享给能看到的朋友。
首先解读torch.nn.CrossEntropyLoss(),官方文档定义是这样的:
从上述截图可以看出,torch.nn.CrossEntropyLoss()是由nn.LogSoftmax()和nn.NLLLoss()的结合体,那接下来将给出nn.LogSoftmax()和nn.NLLLoss()的定义截图:
The negative log likelihood loss. It is useful to train a classification problem with C classes
通过上述解释和图表,我们可以知道,它这个是根据标签值,在softmax对应位置取负数
接下来用简单的代码测试一下:
`import torch
import torch.nn as nn
a = torch.Tensor([[1,2,3]])
target = torch.Tensor([2]).long()
logsoftmax = nn.LogSoftmax()
ce = nn.CrossEntropyLoss()
nll = nn.NLLLoss()
#测试CrossEntropyLoss
cel = ce(a,target)
print(cel)
#输出:tensor(0.4076)
#试LogSoftmax+NLLLoss
lsm_a = logsoftmax(a)
nll_lsm_a = nll(lsm_a,target)
#输出tensor(0.4076)`