细数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中声明只包含一个元素的元组数据方法
Aug 25 Python
详解Python中的日志模块logging
Jun 19 Python
Django中使用locals()函数的技巧
Jul 16 Python
python3音乐播放器简单实现代码
Apr 20 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
Jul 04 Python
详解python之配置日志的几种方式
May 22 Python
python分布式环境下的限流器的示例
Oct 26 Python
使用pandas批量处理矢量化字符串的实例讲解
Jul 10 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
Numpy之将矩阵拉成向量的实例
Nov 30 Python
python实现TCP文件传输
Mar 20 Python
Python 开发工具通过 agent 代理使用的方法
Sep 27 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中的fopen()函数用打开文件模式说明
2013/06/20 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
对联广告js flash激活
2006/10/19 Javascript
利用404错误页面实现UrlRewrite的实现代码
2008/08/20 Javascript
JQuery筛选器全系列介绍
2013/08/27 Javascript
js中生成map对象的方法
2014/01/09 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
2017/03/17 Javascript
基于openlayers4实现点的扩散效果
2020/08/17 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
Python实现设置windows桌面壁纸代码分享
2015/03/28 Python
python Pygame的具体使用讲解
2017/11/03 Python
django rest framework之请求与响应(详解)
2017/11/06 Python
利用Python找出序列中出现最多的元素示例代码
2017/12/08 Python
对于Python深浅拷贝的理解
2019/07/29 Python
在macOS上搭建python环境的实现方法
2019/08/13 Python
Python列表的切片实例讲解
2019/08/20 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
开启Django博客的RSS功能的实现方法
2020/02/17 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
团员的自我评价
2013/12/01 职场文书
英文简历自荐信范文
2013/12/11 职场文书
大四学生思想汇报
2014/01/13 职场文书
卫生系统先进事迹
2014/05/13 职场文书
法院答辩状格式
2015/05/22 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js