细数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获取android设备的GPS信息脚本分享
Mar 06 Python
使用Python中的线程进行网络编程的入门教程
Apr 15 Python
Python爬虫实例爬取网站搞笑段子
Nov 08 Python
python实现机器人行走效果
Jan 29 Python
Python爬虫获取图片并下载保存至本地的实例
Jun 01 Python
python 去除txt文本中的空格、数字、特定字母等方法
Jul 24 Python
Python连接Redis的基本配置方法
Sep 13 Python
python 多个参数不为空校验方法
Feb 14 Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 Python
Django全局启用登陆验证login_required的方法
Jun 02 Python
Python Selenium实现无可视化界面过程解析
Aug 25 Python
用Python简陋模拟n阶魔方
Apr 17 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
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
PHP程序员不应该忽略的3点
2015/10/09 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
JavaScript 题型问答有答案参考
2010/02/17 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
vue中各种通信传值方式总结
2019/02/14 Javascript
微信公众平台 发送模板消息(Java接口开发)
2019/04/17 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
用Python将结果保存为xlsx的方法
2019/01/28 Python
详解python中list的使用
2019/03/15 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
如何理解transaction事务的概念
2015/05/27 面试题
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
土木工程专业个人求职信
2013/12/30 职场文书
啤酒节策划方案
2014/05/28 职场文书
乡镇防汛工作汇报
2014/10/28 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
Python time库的时间时钟处理
2021/05/02 Python
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS
使用Apache Camel表达REST服务的方法
2022/06/10 Servers