交叉熵损失函数和NLL_loss

目录

 1.交叉熵损失函数的计算过程:

2.交叉熵损失函数的公式:

3.NLL loss(负对数似然函数损失)

4.NLL_Loss和交叉熵损失函数关系


 1.交叉熵损失函数的计算过程:

 

交叉熵损失函数经常用于分类问题中,特别是在神经网络做分类问题时,也经常使用交叉熵作为损失函数,此外,由于交叉熵涉及到计算每个类别的概率,所以交叉熵几乎每次都和sigmoid(或softmax)函数一起出现。

我们用神经网络最后一层输出的情况,来看一眼整个模型预测、获得损失和学习的流程:

  1. 神经网络最后一层得到每个类别的得分scores(也叫logits)
  2. 该得分经过sigmoid(或softmax)函数获得概率输出;
  3. 模型预测的类别概率输出与真实类别的one hot形式进行交叉熵损失函数的计算。

2.交叉熵损失函数的公式:

参考:https://zhuanlan.zhihu.com/p/35709485

3.NLL loss(负对数似然函数损失)定义和pytorch实现

NLL\_Loss=-\sum log(P)

但是pytorch中的NLL loss定义中却没有对score做log运算(仅对输入score做求和取负),因此官方文档要求,在使用nll_loss之前需要对score做log运算,这样计算出来的就是nll-loss原本的定义:

torch.nn.functional.nll_loss — PyTorch 1.11.0 documentation

 并通过参数reduction 可以控制输出是否做“不做操作|平均|求和”

4.NLL_Loss和交叉熵损失函数关系

  • 就数学上的严格定义而言,二者区别在于是否对score做softmax运算,即:

CrossEntropy(score)=NLL\_Loss(softmax(score))

  • 就pytorch的实现而言,二者的区别在于是否对score做log_foftmax运算(因为pytorch中NLL_Loss没有对score做log运算):

CrossEntropy(score)=NLL\_Loss(log\_softmax(score))

换句话说,在pytorch中,NLLLoss 的 输入 是一个对数概率向量和一个目标标签. 它不会为我们计算对数概率. 适合网络的最后一层是log_softmax. 损失函数 nn.CrossEntropyLoss() 与 NLLLoss() 相同, 唯一的不同是它为我们去做 softmax.

CrossEntropyLoss()=log_softmax() + NLLLoss() 

其中,softmax()定义如下:

log_softmax()定义如下:

参考:损失函数——负对数似然_Pr4da的博客-CSDN博客_负对数似然损失函数

Pytorch详解NLLLoss和CrossEntropyLoss_豪哥123的博客-CSDN博客_nllloss

CrossEntropyLoss与NLLLoss的总结_街道口扛把子的博客-CSDN博客_f.nll_loss

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值