细数nn.BCELoss与nn.CrossEntropyLoss的区别

 更新时间:2020年02月29日 11:37:16   作者:站着刷论文  
今天小编就为大家整理了一篇细数nn.BCELoss与nn.CrossEntropyLoss的区别,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

以前我浏览博客的时候记得别人说过,BCELoss与CrossEntropyLoss都是用于分类问题。可以知道,BCELoss是Binary CrossEntropyLoss的缩写,BCELoss CrossEntropyLoss的一个特例,只用于二分类问题,而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()

以上这篇细数nn.BCELoss与nn.CrossEntropyLoss的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Pycharm中pyqt工具配置(Qt Designer、PyUIC、PyRCC)

    Pycharm中pyqt工具配置(Qt Designer、PyUIC、PyRCC)

    Pycharm中进行扩展工具设置,从而实现在pycharm中打开Qt Designer、Ui文件生成Py文件、资源文件生成Py文件三个功能,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Python中mmap模块处理大文本的操作方法

    Python中mmap模块处理大文本的操作方法

    这篇文章主要介绍了Python中mmap模块(处理大文本),将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存映射读写取代I/O缓存读写,以获得较高的性能,需要的朋友可以参考下
    2023-02-02
  • opencv python Canny边缘提取实现过程解析

    opencv python Canny边缘提取实现过程解析

    这篇文章主要介绍了opencv python Canny边缘提取实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 使用matplotlib创建Gif动图的实现

    使用matplotlib创建Gif动图的实现

    本文主要介绍了使用matplotlib创建Gif动图的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Python判断和循环语句的分析与应用

    Python判断和循环语句的分析与应用

    判断语句是用来筛选条件,过滤条件的。循环语句是用来解决重复性代码的问题,提高工作效率。今天的知识点不多,耐心看完吧
    2022-07-07
  • Python箱型图处理离群点的例子

    Python箱型图处理离群点的例子

    今天小编就为大家分享一篇Python箱型图处理离群点的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Pytorch中膨胀卷积的用法详解

    Pytorch中膨胀卷积的用法详解

    今天小编就为大家分享一篇Pytorch中膨胀卷积的用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python pip超详细教程之pip的安装与使用

    Python pip超详细教程之pip的安装与使用

    python中有许多有用的库,要使用这些第三方库,需要安装pip。这篇文章主要为大家介绍了pip的安装与使用,解决pip下载速度慢的问题,需要的可以参考一下
    2022-07-07
  • pytest用例间参数传递的两种实现方式示例

    pytest用例间参数传递的两种实现方式示例

    pytest提供了许多运行命令以供定制化运行某一类测试用例或者某个测试用例等,下面这篇文章主要给大家介绍了关于pytest用例间参数传递的两种实现方式,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • Django Docker容器化部署之Django-Docker本地部署

    Django Docker容器化部署之Django-Docker本地部署

    这篇文章主要介绍了Django Docker容器化部署之Django-Docker本地部署,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10

最新评论