当前位置: 代码迷 >> 综合 >> Pytorch中归一函数LogSoftMax-SoftMax,损失函数NLLLoss-CrossEntropyLoss的关系
  详细解决方案

Pytorch中归一函数LogSoftMax-SoftMax,损失函数NLLLoss-CrossEntropyLoss的关系

热度:29   发布时间:2023-12-06 07:00:43.0

转载: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