细数nn.BCELoss与nn.CrossEntropyLoss的区别


Posted in Python onFebruary 29, 2020

以前我浏览博客的时候记得别人说过,BCELoss与CrossEntropyLoss都是用于分类问题。可以知道,BCELoss是Binary CrossEntropyLoss的缩写,BCELoss CrossEntropyLoss的一个特例,只用于二分类问题,而CrossEntropyLoss可以用于二分类,也可以用于多分类。

不过我重新查阅了一下资料,发现同样是处理二分类问题,BCELoss与CrossEntropyLoss是不同的。下面我详细讲一下哪里不同。

1、使用nn.BCELoss需要在该层前面加上Sigmoid函数。

公式如下:

细数nn.BCELoss与nn.CrossEntropyLoss的区别

2、使用nn.CrossEntropyLoss会自动加上Sofrmax层。

公式如下:

细数nn.BCELoss与nn.CrossEntropyLoss的区别

可以看出,这两个计算损失的函数使用的激活函数不同,故而最后的计算公式不同。

补充拓展:pytorch的BCELoss和cross entropy

BCELoss:

torch.nn.BCELoss:

Input: (N, *)(N,∗) where *∗ means, any number of additional dimensions

Target: (N, *)(N,∗), same shape as the input

Output: scalar. If reduction is 'none', then (N, *)(N,∗), same shape as input.

这里的输入和target 目标必须形状一致,并且都是浮点数,二分类中一般用sigmoid的把输出挑出一个数:

>>> m = nn.Sigmoid()
>>> loss = nn.BCELoss()
>>> input = torch.randn(3, requires_grad=True)
>>> target = torch.empty(3).random_(2)
>>> output = loss(m(input), target)
>>> output.backward()

CrossEntropyLoss:

input(N,C) #n 是batch c是类别
target(N)

输入和target 形状是不同的crossEntropy 是自己会做softmax

>>> loss = nn.CrossEntropyLoss()
>>> input = torch.randn(3, 5, requires_grad=True)
>>> target = torch.empty(3, dtype=torch.long).random_(5)
>>> output = loss(input, target)
>>> output.backward()

以上这篇细数nn.BCELoss与nn.CrossEntropyLoss的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中List.index()方法的使用教程
May 20 Python
Python使用Matplotlib实现Logos设计代码
Dec 25 Python
Python列表推导式与生成器表达式用法示例
Feb 08 Python
python 通过xml获取测试节点和属性的实例
Mar 31 Python
Python实现的建造者模式示例
Aug 06 Python
python实现推箱子游戏
Mar 25 Python
Python实现去除列表中重复元素的方法总结【7种方法】
Feb 16 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
Feb 11 Python
spyder 在控制台(console)执行python文件,debug python程序方式
Apr 20 Python
python中前缀运算符 *和 **的用法示例详解
May 28 Python
Python语言编写智力问答小游戏功能
Oct 13 Python
python接口自动化框架实战
Dec 23 Python
Pytorch对Himmelblau函数的优化详解
Feb 29 #Python
Pytorch中的自动求梯度机制和Variable类实例
Feb 29 #Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 #Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
Feb 29 #Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 #Python
python实现门限回归方式
Feb 29 #Python
Python3.9又更新了:dict内置新功能
Feb 28 #Python
You might like
第十二节--类的自动加载
2006/11/16 PHP
php摘要生成函数(无乱码)
2012/02/04 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
2016/05/19 PHP
Yii框架实现图片上传的方法详解
2017/05/20 PHP
yii2 在控制器中验证请求参数的使用方法
2019/06/19 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
如何使用Javascript中的this关键字
2020/05/28 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
Anconda环境下Vscode安装Python的方法详解
2020/03/29 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
Html5实现iPhone开机界面示例代码
2013/06/30 HTML / CSS
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
Dune London官网:英国著名奢华鞋履品牌
2017/11/30 全球购物
Nayomi官网:沙特阿拉伯王国睡衣和内衣品牌
2020/12/19 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
护士自我介绍信
2014/01/13 职场文书
听课评语大全
2014/04/30 职场文书
毕业生求职信范文
2014/06/29 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
2014年新教师工作总结
2014/11/08 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书