pytorch中常用的损失函数用法说明

 更新时间:2021年05月13日 10:24:25   作者:m0_46483236  
这篇文章主要介绍了pytorch中常用的损失函数用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

1. pytorch中常用的损失函数列举

pytorch中的nn模块提供了很多可以直接使用的loss函数, 比如MSELoss(), CrossEntropyLoss(), NLLLoss() 等

官方链接: https://pytorch.org/docs/stable/_modules/torch/nn/modules/loss.html

pytorch中常用的损失函数
损失函数 名称 适用场景
torch.nn.MSELoss() 均方误差损失 回归
torch.nn.L1Loss() 平均绝对值误差损失 回归
torch.nn.CrossEntropyLoss() 交叉熵损失 多分类
torch.nn.NLLLoss() 负对数似然函数损失 多分类
torch.nn.NLLLoss2d() 图片负对数似然函数损失 图像分割
torch.nn.KLDivLoss() KL散度损失 回归
torch.nn.BCELoss() 二分类交叉熵损失 二分类
torch.nn.MarginRankingLoss() 评价相似度的损失
torch.nn.MultiLabelMarginLoss() 多标签分类的损失 多标签分类
torch.nn.SmoothL1Loss() 平滑的L1损失 回归
torch.nn.SoftMarginLoss() 多标签二分类问题的损失

多标签二分类

2. 比较CrossEntropyLoss() 和NLLLoss()

(1). CrossEntropyLoss():

torch.nn.CrossEntropyLoss(weight=None,   # 1D张量,含n个元素,分别代表n类的权重,样本不均衡时常用
                          size_average=None, 
                          ignore_index=-100, 
                          reduce=None, 
                          reduction='mean' )

参数:

weight: 1D张量,含n个元素,分别代表n类的权重,样本不均衡时常用, 默认为None.

计算公式:

weight = None时:

weight ≠ None时:

输入:

output: 网络未加softmax的输出

target: label值(0,1,2 不是one-hot)

代码:

loss_func = CrossEntropyLoss(weight=torch.from_numpy(np.array([0.03,0.05,0.19,0.26,0.47])).float().to(device) ,size_average=True)
loss = loss_func(output, target)

(2). NLLLoss():

torch.nn.NLLLoss(weight=None, 
                size_average=None, 
                ignore_index=-100,
                reduce=None, 
                reduction='mean')

输入:

output: 网络在logsoftmax后的输出

target: label值(0,1,2 不是one-hot)

代码:

loss_func = NLLLoss(weight=torch.from_numpy(np.array([0.03,0.05,0.19,0.26,0.47])).float().to(device) ,size_average=True)
loss = loss_func(output, target)


(3). 二者总结比较:

总之, CrossEntropyLoss() = softmax + log + NLLLoss() = log_softmax + NLLLoss(), 具体等价应用如下:

####################---CrossEntropyLoss()---#######################
 
loss_func = CrossEntropyLoss()
loss = loss_func(output, target)
 
####################---Softmax+log+NLLLoss()---####################
 
self.softmax = nn.Softmax(dim = -1)
 
x = self.softmax(x)
output = torch.log(x)
 
loss_func = NLLLoss()
loss = loss_func(output, target)
 
####################---LogSoftmax+NLLLoss()---######################
 
self.log_softmax = nn.LogSoftmax(dim = -1)
 
output = self.log_softmax(x)
 
loss_func = NLLLoss()
loss = loss_func(output, target)

补充:常用损失函数用法小结之Pytorch框架

在用深度学习做图像处理的时候,常用到的损失函数无非有四五种,为了方便Pytorch使用者,所以简要做以下总结

1)L1损失函数

预测值与标签值进行相差,然后取绝对值,根据实际应用场所,可以设置是否求和,求平均,公式可见下,Pytorch调用函数:nn.L1Loss

2)L2损失函数

预测值与标签值进行相差,然后取平方,根据实际应用场所,可以设置是否求和,求平均,公式可见下,Pytorch调用函数:nn.MSELoss

3)Huber Loss损失函数

简单来说就是L1和L2损失函数的综合版本,结合了两者的优点,公式可见下,Pytorch调用函数:nn.SmoothL1Loss

4)二分类交叉熵损失函数

简单来说,就是度量两个概率分布间的差异性信息,在某一程度上也可以防止梯度学习过慢,公式可见下,Pytorch调用函数有两个,一个是nn.BCELoss函数,用的时候要结合Sigmoid函数,另外一个是nn.BCEWithLogitsLoss()

5)多分类交叉熵损失函数

也是度量两个概率分布间的差异性信息,Pytorch调用函数也有两个,一个是nn.NLLLoss,用的时候要结合log softmax处理,另外一个是nn.CrossEntropyLoss

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python-pymysql如何实现更新mysql表中任意字段数据

    python-pymysql如何实现更新mysql表中任意字段数据

    这篇文章主要介绍了python-pymysql如何实现更新mysql表中任意字段数据问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Python全栈之进程和守护进程

    Python全栈之进程和守护进程

    这篇文章主要为大家介绍了Python进程和守护进程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • python安装模块如何通过setup.py安装(超简单)

    python安装模块如何通过setup.py安装(超简单)

    这篇文章主要介绍了python安装模块如何通过setup.py安装,安装方法其实很简单,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-05-05
  • Python利用pandas处理CSV文件的用法示例

    Python利用pandas处理CSV文件的用法示例

    pandas是一个第三方数据分析库,其集成了大量的数据分析工具,可以方便的处理和分析各类数据,本文将给大家介绍Python利用pandas处理CSV文件的用法示例,文中通过代码和图文讲解的非常详细,需要的朋友可以参考下
    2024-07-07
  • django中ORM模型常用的字段的使用方法

    django中ORM模型常用的字段的使用方法

    这篇文章主要介绍了django中ORM模型常用的字段的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Python 支付整合开发包的实现

    Python 支付整合开发包的实现

    这篇文章主要介绍了Python 支付整合开发包的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Numpy 中的矩阵求逆实例

    Numpy 中的矩阵求逆实例

    今天小编就为大家分享一篇Numpy 中的矩阵求逆实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python字典生成式、集合生成式、生成器用法实例分析

    Python字典生成式、集合生成式、生成器用法实例分析

    这篇文章主要介绍了Python字典生成式、集合生成式、生成器用法,结合实例形式分析了Python字典生成式、集合生成式、生成器相关原理、使用技巧与操作注意事项,需要的朋友可以参考下
    2020-01-01
  • Python提取视频帧图片实例代码

    Python提取视频帧图片实例代码

    大家好,本篇文章主要讲的是Python提取视频帧图片实例代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Django CBV类的用法详解

    Django CBV类的用法详解

    这篇文章主要介绍了Django CBV类的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07

最新评论