细数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的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Pygame库200行代码实现简易飞机大战

    Pygame库200行代码实现简易飞机大战

    本文主要介绍了Pygame库200行代码实现简易飞机大战,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Python利用神经网络解决非线性回归问题实例详解

    Python利用神经网络解决非线性回归问题实例详解

    这篇文章主要介绍了Python利用神经网络解决非线性回归问题,结合实例形式详细分析了Python使用神经网络解决非线性回归问题的相关原理与实现技巧,需要的朋友可以参考下
    2019-07-07
  • Python中快速掌握Data Frame的常用操作

    Python中快速掌握Data Frame的常用操作

    这篇文章主要介绍了Python中快速掌握Data Frame的常用操作,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Python 带有参数的装饰器实例代码详解

    Python 带有参数的装饰器实例代码详解

    这篇文章主要介绍了Python 装饰器,带有参数的装饰器实例代码详解,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • 对python GUI实现完美进度条的示例详解

    对python GUI实现完美进度条的示例详解

    今天小编就为大家分享一篇对python GUI实现完美进度条的示例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python实现数据库跨服务器迁移

    python实现数据库跨服务器迁移

    这篇文章主要为大家详细介绍了Python实现数据库之间的数据迁移,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • PyQt5结合matplotlib绘图的实现示例

    PyQt5结合matplotlib绘图的实现示例

    这篇文章主要介绍了PyQt5结合matplotlib绘图的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Pytorch实现GoogLeNet的方法

    Pytorch实现GoogLeNet的方法

    今天小编就为大家分享一篇Pytorch实现GoogLeNet的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python 序列的方法总结

    Python 序列的方法总结

    这篇文章主要介绍了Python 序列的方法总结的相关资料,需要的朋友可以参考下
    2016-10-10
  • Python struct.unpack

    Python struct.unpack

    Python中按一定的格式取出某字符串中的子字符串,使用struck.unpack是非常高效的。
    2008-09-09

最新评论