转载:Pytorch常用的交叉熵损失函数CrossEntropyLoss()详解
简单概括一下:
当神经网络输出没有作归一化(softmax计算)处理
OupPut后, 计算
logsoftmax_output = nn.LogSoftMax(output)
函数LogSoftMax和softmax的关系为:
nn.LogSoftMax(output)= torch.log(nn.softmax(output))
什么是NLLLoss损失函数:
比如真实标签是
label = tensor([1, 2, 0])
假如得到的logsoftmax_output为
logsoftmax_output=
tensor([[-1.0529, -1.8542, -0.7042],[-0.5572, -1.0536, -2.5445],[-0.8878, -0.8122, -1.9340]])
则
nn.NLLLoss(logsoftmax_output, label)
输出:
tensor(1.7622)
等价于-( -1.8542-2.5445-0.8878)/ 3 = 1.7622
说完NLLLoss-Cross,来讲一讲CrossEntropyLoss:
CrossEntropyLoss (output, labels)
等价于输出的output先做softmax运算,再取对数,再计算NLLLoss-Cross损失
output=> softmax=> log()=>NLLLoss-Cross