文章目录
一、损失函数 nn.CrossEntropyLoss()
二、什么是交叉熵
三、Pytorch 中的 CrossEntropyLoss() 函数
参考链接
一、损失函数 nn.CrossEntropyLoss()
交叉熵损失函数 nn.CrossEntropyLoss() ,结合了 nn.LogSoftmax() 和 nn.NLLLoss() 两个函数。
它在做分类(具体几类)训练的时候是非常有用的。
二、什么是交叉熵
交叉熵主要是用来判定 实际的输出与期望的输出的接近程度。
举个例子:在做分类训练的时候,如果一个样本属于第 K 类,那么这个类别所对应的输出节点的输出值应该为1,而其他节点的输出都为0,即 [0,0,1,0,….0,0] ,这个数组也就是样本的 Label,是神经网络最期望的输出结果。我们用交叉熵损失函数来衡量网络的实际输出与正确标签的差异,利用这种差异经过反向传播去更新网络参数。
交叉熵:它主要刻画的是实际输出(概率)与期望输出(概率)的距离,也就是交叉熵的值越小,两个概率分布就越接近。假设概率分布p为期望输出,概率分布q为实际输出,则交叉熵定义为:
实际例子:
三、Pytorch 中的 CrossEntropyLoss() 函数
Pytorch中计算的交叉熵并不是采用第 “二” 节中的公式计算得到的,而是采用交叉熵的另外一种方式计算得到的:
Pytorch中CrossEntropyLoss()函数的主要是将softmax-log-NLLLoss合并到一块得到的结果。
Softmax后的数值都在0~1之间,所以 ln 之后值域是负无穷到0。
然后将Softmax之后的结果取log,将乘法改成加法减少计算量,同时保障函数的单调性 。
NLLLoss 的结果就是把上面的输出与 Label 对应的那个值拿出来,去掉负号,再求均值。
一个实例:直接使用pytorch中的 nn.CrossEntropyLoss() 计算得到的结果与 softmax-log-NLLLoss计算得到的结果是一致的
————————————————
版权声明:本文为CSDN博主「想变厉害的大白菜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44211968/article/details/123906631