细数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之Character string(实例讲解)
Sep 25 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
python实现ID3决策树算法
Aug 29 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
python 检查数据中是否有缺失值,删除缺失值的方式
Dec 02 Python
python 视频逐帧保存为图片的完整实例
Dec 10 Python
Python tkinter界面实现历史天气查询的示例代码
Aug 23 Python
Python3实现英文字母转换哥特式字体实例代码
Sep 01 Python
PyQt5 QThread倒计时功能的实现代码
Apr 02 Python
利用python做表格数据处理
Apr 13 Python
拒绝盗图!教你怎么用python给图片加水印
Jun 04 Python
手把手教你实现PyTorch的MNIST数据集
Jun 28 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
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
php adodb介绍
2009/03/19 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
利用Laravel事件系统如何实现登录日志的记录详解
2017/05/20 PHP
利用Laravel生成Gravatar头像地址的优雅方法
2017/12/30 PHP
Laravel框架基于ajax实现二级联动功能示例
2019/01/17 PHP
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
2013/04/25 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
2017/03/01 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
2021/01/27 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
2017/08/10 jQuery
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
为Python程序添加图形化界面的教程
2015/04/29 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
Python3内置模块random随机方法小结
2019/07/13 Python
Python类继承和多态原理解析
2020/02/05 Python
Python脚本调试工具安装过程
2021/01/11 Python
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
会计毕业生求职简历的自我评价
2013/10/20 职场文书
公司领导班子对照材料
2014/08/18 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书