细数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实现发送邮件功能
Jul 22 Python
python做量化投资系列之比特币初始配置
Jan 23 Python
对Python中DataFrame按照行遍历的方法
Apr 08 Python
Python paramiko模块的使用示例
Apr 11 Python
Python中GeoJson和bokeh-1的使用讲解
Jan 03 Python
详解【python】str与json类型转换
Apr 29 Python
pyqt5 键盘监听按下enter 就登陆的实例
Jun 25 Python
Python+pyplot绘制带文本标注的柱状图方法
Jul 08 Python
Python及Pycharm安装方法图文教程
Aug 05 Python
Pytorch 之修改Tensor部分值方式
Dec 27 Python
如何在pycharm中安装第三方包
Oct 27 Python
python实现网络五子棋
Apr 11 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操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
Jquery工作常用实例 使用AJAX使网页进行异步更新
2011/07/26 Javascript
Jquery 选中表格一列并对表格排序实现原理
2012/12/15 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
可选择和输入的下拉列表框示例
2013/11/05 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
[42:48]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第二场 12.11
2020/12/16 DOTA
Python运算符重载用法实例
2015/05/28 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
Python中强大的命令行库click入门教程
2016/12/26 Python
点球小游戏python脚本
2018/05/22 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
python程序如何进行保存
2020/07/03 Python
Python random模块的使用示例
2020/10/10 Python
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
编辑找工作求职信分享
2014/01/03 职场文书
标准单位租车协议书
2014/09/23 职场文书
职工食堂管理制度
2015/08/06 职场文书
Redis数据同步之redis shake的实现方法
2022/04/21 Redis
Python面试不修改数组找出重复的数字
2022/05/20 Python
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js