pytorch中CrossEntropyLoss和NLLLoss的区别与联系

CrossEntropyLoss和NLLLoss主要是用在多分类问题的损失函数,他们两个既有不同,也有不浅的联系。先分别看一下:

CrossEntropyLoss

称为交叉熵损失函数,主要的计算公式为:
loss(x,class)=−log(eclass∑j(ex[j]))loss(x,class)=-log(\frac{e^{class}}{\sum_j(e^{x[j]})})loss(x,class)=−log(∑j​(ex[j])eclass​)
其中eclasse^{class}eclass表示某个输出的指数,∑j(ex[j])\sum_j(e^{x[j]})∑j​(ex[j])表示所有输出的指数的累加,指数的使用保证操作后的值大于0,除以累加和保证了所有值加起来和为1
具体的官方文档:

NLLLoss

这个损失函数的全称为负对数似然损失(The negative log likelihood loss),具体的公式如下:
l(x,y)=L={l1,l2,...,lN}T,ln=−WynXn,yn,Wc=weight[c]∗1l(x,y)=L=\{l_1,l_2,...,l_N\}^T,l_n = -W_{y_n}X_{n,y_n},W_c = weight[c]*1l(x,y)=L={l1​,l2​,...,lN​}T,ln​=−Wyn​​Xn,yn​​,Wc​=weight[c]∗1
其中X为输入,W为权重,上述公式为reduction=none时的损失函数计算。WynW_{y_n}Wyn​​就表示对应于yny_nyn​类的权重,X也是同样的道理,N为batch size的大小。
f(n)={∑n=1N1∑n=1NWyn,if reduction= mean∑n=1Nln,if reduction= sumf(n)= \begin{cases} \sum_{n=1}^N\frac{1}{\sum_{n=1}^NW_{y_n}}, & \text {if $reduction$ = mean} \\ \sum_{n=1}^Nl_n, & \text{if $reduction$ = sum} \end{cases}f(n)={∑n=1N​∑n=1N​Wyn​​1​,∑n=1N​ln​,​if reduction = meanif reduction = sum​
官方的文档为:

区别

对于CrossEntropyLoss来说网络的最后一层线性层的输出可以直接作为该损失函数的输入。
对于NLLLoss来说网络的最后一层线性层的输入不能直接使用,需要额外加一层.LogSoftmax来对线性的输出做如下操作:
log(11+e(−X))log(\frac{{1}}{1+e^{(-X)}})log(1+e(−X)1​)
经过LogSoftmax后的输出作为NLLLoss的输入。

联系

从功能实现来说:
CrossEntropyLoss=LogSoftmax层+NLLLossCrossEntropyLoss = LogSoftmax层 + NLLLossCrossEntropyLoss=LogSoftmax层+NLLLoss

在代码编写使用中的区别

pytorch中CrossEntropyLoss和NLLLoss的区别与联系相关推荐

  1. PyTorch学习笔记——softmax和log_softmax的区别、CrossEntropyLoss() 与 NLLLoss() 的区别、log似然代价函数...

    1.softmax 函数 Softmax(x) 也是一个 non-linearity, 但它的特殊之处在于它通常是网络中一次操作. 这是因为它接受了一个实数向量并返回一个概率分布.其定义如下. 定义 ...

  2. 关于pytorch中各种矩阵乘法运算的区别

    文章目录 前言 1.torch.mul(X,Y) 2.torch.mm().torch.bmm() 3.torch.matmul().@ 前言 提示:文章只是作为自己学习中的记录.总结,不喜勿喷:同时 ...

  3. pytorch 中 logsoftmax 与 softmax的区别

  4. 【Pytorch】对比CrossEntropyLoss与NLLLoss

    CrossEntropyLoss(交叉熵损失)与NLLLoss(negative log likelihood,负对数似然损失)都是适用于分类问题,基于log似然损失,即交叉熵损失函数的实现方式,其体 ...

  5. 损失函数-负对数似然和交叉熵(Pytorch中的应用)

    文章目录 1.负对数似然损失函数 1.1.似然 1.2.似然函数 1.3.极大似然估计 1.4.对数似然 1.5.负对数似然 1.6.pytorch中的应用 2.交叉熵损失函数 2.1.信息量 2.2 ...

  6. 详解PyTorch中的ModuleList和Sequential

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨小占同学@知乎(已授权) 来源丨https://zhuanla ...

  7. 收藏 | 详解PyTorch中的ModuleList和Sequential

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨小占同学@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/7520666 ...

  8. Pytorch中的分类损失函数比较NLLLoss与CrossEntropyLoss

    参考来源,仅作为学习笔记 二分类 对于一个二分类问题,比如我们有一个样本,有两个不同的模型对他进行分类,那么它们的输出都应该是一个二维向量,比如: 模型一的输出为:pred_y1=[0.8,0.2] ...

  9. pytorch几种损失函数CrossEntropyLoss、NLLLoss、BCELoss、BCEWithLogitsLoss、focal_loss、heatmap_loss

    分类问题常用的几种损失,记录下来备忘,后续不断完善. nn.CrossEntropyLoss()交叉熵损失 常用于多分类问题 CE = nn.CrossEntropyLoss() loss = CE( ...

最新文章

  1. excel学习笔记之一
  2. 怎样才能正确的挑选和建立关键词词库?
  3. Codeforces Round #486 (Div. 3)【完结】
  4. Linux的top命令
  5. ES6语法大全 export,import,for.of循环,promise等等
  6. linux下挂载iso镜像的方法
  7. 学C/C++不能不知道的硬知识
  8. 【白皮书分享】2020智能体白皮书-华为.pdf(附下载链接)
  9. 百度李彦宏:自动驾驶最后一公里率先到来;未来20年手机依赖会降低
  10. linux php源码安装mysql_linux源码安装mysql5.7
  11. 取消计算机触摸板,笔记本电脑触摸板,教您笔记本电脑触摸板怎么关闭
  12. excel函数 不能正常显示数字
  13. 编辑器——sublime
  14. oracle12c cdb修改,Oracle 12c 配置和修改 CDB 和 PDB 参数
  15. 【鸿蒙应用开发】-入门
  16. Android 集成环信客服云
  17. [C++] 配平化学方程式算法的封装
  18. VR眼镜转接线Type-c To DP加快充(乐得瑞LDr6282)
  19. 数据结构查找-7-3 词频统计 (30 分)
  20. tomcat增加内存

热门文章

  1. 软件开发质量的双保险 — 2.业务设计验证与业务用例
  2. 面向非易失性内存的持久索引数据结构研究综述
  3. 【UI/UX】桌面GUI设计
  4. 涂国旗(洛谷P3392题题解,Java语言描述)
  5. 【Java】批判一个有关++的Java选择题
  6. bzoj1934: [Shoi2007]Vote 善意的投票(最小割)
  7. 分享一个关于网站适应性的解决方案
  8. vc升级失败恢复快照后数据不一致问题
  9. Meteor项目实战 -- Next 0.0.2
  10. Android IOS WebRTC 音视频开发总结(二六)-- webrtc调用堆栈