细数nn.BCELoss与nn.CrossEntropyLoss的区别
作者:站着刷论文 发布时间:2021-04-16 16:29:28
标签:nn.BCELoss,nn.CrossEntropyLoss
以前我浏览博客的时候记得别人说过,BCELoss与CrossEntropyLoss都是用于分类问题。可以知道,BCELoss是Binary CrossEntropyLoss的缩写,BCELossCrossEntropyLoss的一个特例,只用于二分类问题,而CrossEntropyLoss可以用于二分类,也可以用于多分类。
不过我重新查阅了一下资料,发现同样是处理二分类问题,BCELoss与CrossEntropyLoss是不同的。下面我详细讲一下哪里不同。
1、使用nn.BCELoss需要在该层前面加上Sigmoid函数。
公式如下:
2、使用nn.CrossEntropyLoss会自动加上Sofrmax层。
公式如下:
可以看出,这两个计算损失的函数使用的激活函数不同,故而最后的计算公式不同。
补充拓展: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()
来源:https://blog.csdn.net/f156207495/article/details/88874911
0
投稿
猜你喜欢
- 由于tensorflow版本不同,可能一些函数的调用也有变换,这时候可能需要查看tensorflow版本,可以在终端输入查询命令如下:imp
- MySQL不允许SELECT FROM后面指向用作UPDATE的表,有时候让人纠结。当然,有比创建无休止的临时表更好的办法。本文解释如何UP
- 一、安装库需要安装pywin32库pip install pywin32二、代码原理WPS高清图片导出需要会员,就为了一个这个小需求开一个会
- 功能描述:如图,右侧悬浮菜单按钮,只支持上下方向拖动,点击时展开或关闭菜单。BUG说明:鼠标上下方向拖拽,如果松开时鼠标位于悬浮按钮上会默认
- 1、计算器功能介绍可以实现数据的加(+),减(-),乘(*),除(/),取余运算(%),以及实现数据的删除(Del)和清空功能(C)。2、计
- 自己在刚学习python时写的,中途遇到很多问题,查了很多资料,下面就是我爬取租房信息的代码:链家的房租网站两个导入的包1.requests
- 一、什么是系统调用In computing, a system call is the programmatic way in which
- 本文实例为大家分享了Python曲线拟合的最小二乘法,供大家参考,具体内容如下模块导入import numpy as npimport ga
- 一、下载安装官网下载社区版dmg安装文件: https://dev.mysql.com/downloads/mysql/1、执行安装文件,按
- 一个模块可以在逻辑上组织Python代码。将相关的代码到一个模块中,使代码更容易理解和使用。模块是可以绑定和借鉴任意命名属性的P
- 简单使用最开始,我们用最短的代码体验一下logging的基本功能。import logginglogger = logging.getLog
- 1.开始----程序-----oracle------配置和移植工具-----Net Manager----本地----服务命名---ora
- 一、绘制折线图import seaborn as snsimport numpy as npimport pandas as pdimpor
- 一、re是什么?正则表达式是一个特殊的字符序列,能方便的检查一个字符串是否与某种模式匹配。re模块使得python拥有全部的正则表达式功能。
- python的图形用户界面我是大帅哥啊 python的图形用户界面msgbox的使用ccbox的使用buttonbox的使用buttonbo
- 什么是集合的幂集?就是原集合中所有的子集(bai包括全集du和空集)构成的集族。可数集是zhi最小的无限集; 它的幂集和实数dao集一一对应
- 本文实例分析了python字符串连接方法。分享给大家供大家参考,具体如下:python字符串连接有几种方法,把大家可能用到的列出来,第一个方
- 本文实例讲述了Python实现快速排序的方法。分享给大家供大家参考,具体如下:说起快排的Python实现,首先谈一下,快速排序的思路:1、取
- 本文实例讲述了mysql中各种常见join连表查询。分享给大家供大家参考,具体如下:通常我们需要连接多个表查询数据,以获取想要的结果。一、连
- 首先贴出四种方法适用范围比较:注释:Excel 2003 即XLS文件有大小限制即65536行256列,所以不支持大文件。而Excel 20