一段代码说明:
import torch
import torch.nn.functional as F
data=torch.randn(2,5)
softmax= F.softmax(data,dim=1)
log_soft1=torch.log(softmax)
log_soft=F.log_softmax(data,dim=1) # softmax + log, 即先softmax再log
#上面的log_soft 和log_soft1 是等值 的
target=torch.tensor([1,2])
entropy_out = F.cross_entropy(data,target)
nll_out = F.nll_loss(log_soft,target)
print("entropy_out:",entropy_out)
print('nll_out:',nll_out)
#上面的entropy_out和nll_out是相等的
log_softmax = 先softmax 再作log, 其实就是复合函数
交叉熵损失函数 CrossEntropyLoss = log_softmax+ nll_loss, 即先log softmax后再作nll_loss 运算。
交叉熵损失就不用再说了吧,两个分布的相似度,值 越小表示相似度越高。 关于交叉熵的解释,请参见 : 一文搞懂熵(Entropy),交叉熵(Cross-Entropy) - 知乎 (zhihu.com)