细数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 相关文章推荐
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
Python多线程编程(三):threading.Thread类的重要函数和方法
Apr 05 Python
开源软件包和环境管理系统Anaconda的安装使用
Sep 04 Python
python中从str中提取元素到list以及将list转换为str的方法
Jun 26 Python
对python添加模块路径的三种方法总结
Oct 16 Python
浅谈pyqt5中信号与槽的认识
Feb 17 Python
python Django里CSRF 对应策略详解
Aug 05 Python
Python搭建代理IP池实现检测IP的方法
Oct 27 Python
Selenium向iframe富文本框输入内容过程图解
Apr 10 Python
python获得命令行输入的参数的两种方式
Nov 02 Python
Django自定义YamlField实现过程解析
Nov 11 Python
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 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
PHP序列号生成函数和字符串替换函数代码
2012/06/07 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
php简单日历函数
2015/10/28 PHP
PHP在线调试执行的实现方法(附demo源码)
2016/04/28 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
Bootstrap布局组件应用实例讲解
2016/02/17 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
2016/02/23 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
浅谈jQuery双事件多重加载的问题
2016/10/05 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
python抓取网页中链接的静态图片
2018/01/29 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
Python实现端口检测的方法
2018/07/24 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
django url到views参数传递的实例
2019/07/19 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
结束运行python的方法
2020/06/16 Python
pandas处理csv文件的方法步骤
2020/10/16 Python
CSS3动画效果回调处理详解
2014/12/10 HTML / CSS
CSS3 分类菜单效果
2019/05/27 HTML / CSS
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
师德演讲稿范文
2014/05/06 职场文书
文明美德伴我成长演讲稿
2014/05/12 职场文书
低碳环保口号
2014/06/12 职场文书
小学运动会报道稿
2014/10/04 职场文书
MySQL注入基础练习
2021/05/30 MySQL