细数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脚本
Apr 05 Python
python实现代理服务功能实例
Nov 15 Python
浅谈Python由__dict__和dir()引发的一些思考
Oct 30 Python
python2 与python3的print区别小结
Jan 16 Python
使用Python写一个量化股票提醒系统
Aug 22 Python
Python可变和不可变、类的私有属性实例分析
May 31 Python
python 判断文件还是文件夹的简单实例
Jun 10 Python
python用TensorFlow做图像识别的实现
Apr 21 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
基于opencv的selenium滑动验证码的实现
Jul 24 Python
基于Python实现粒子滤波效果
Dec 01 Python
用python开发一款操作MySQL的小工具
May 12 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
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
PHP6 中可能会出现的新特性预览
2014/04/04 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
几个实用的PHP内置函数使用指南
2014/11/27 PHP
php两种无限分类方法实例
2015/04/21 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
javascript dom 基本操作小结
2010/04/11 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
javascript 显示全局变量与隐式全局变量的区别
2017/02/09 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
如何使用vue slot创建一个模态框的实例代码
2020/05/24 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
python多线程抓取天涯帖子内容示例
2014/04/03 Python
部署Python的框架下的web app的详细教程
2015/04/30 Python
在Python中使用全局日志时需要注意的问题
2015/05/06 Python
Golang与python线程详解及简单实例
2017/04/27 Python
Python对象转换为json的方法步骤
2019/04/25 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
HTML5公共页面提取作为公用代码的方法
2020/06/30 HTML / CSS
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
支教个人总结
2015/03/04 职场文书
辩论赛新闻稿
2015/07/17 职场文书
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
Vue的生命周期一起来看看
2022/02/24 Vue.js