点击关注我哦

一篇文章带你了解pytorch中常用的损失函数

Q:什么是损失函数?

训练神经网络类似于人类的学习方式。我们将数据提供给模型,它可以预测某些内容,并告诉其预测是否正确。然后,模型纠正其错误。该模型会重复执行此操作,直到达到我们确定的特定精度水平为止。告诉模型预测错误是正确学习的关键。这是损失函数出现的地方。它告诉模型其估计与实际值相差多远。与人交流虽然比较容易,但要告诉机器,我们需要一种媒介。本篇文章主要介绍常用的几种“媒介”的原理、含义及使用场景。

1.L1范数损失

torch.nn.L1Loss,用来测量平均绝对误差。

其中x是实际值,y是预测值。

含义:

它测量估计值和实际值之间的绝对值,也是错误度量的最简单形式。该误差的值越低,模型越好。我们不能期望它的值为零,因为它可能实际上没有用。总体比较适合处理简单的问题。

使用场景:

+回归问题

+简化模型

+由于神经网络通常用于处理复杂问题,因此很少使用此功能。

2. 均方误差损失 MSELoss

torch.nn.MSELoss,用来测量均方误差(平方L2范数)。

其中x是实际值,y是预测值。

含义:

预测值与实际值之差的平方,换个方式理解:模型会放大较大的损失,并且激励较小的损失。例如:如果分类器的实际差值为200,则错误为40000;如果分类器实际差值为0.1,则错误为0.01。

使用场景:

+回归问题。

+数值特征不大。

+问题不是很高的尺寸。

3. 平滑版L1损失 SmoothL1Loss

torch.nn.SmoothL1Loss,也称为Huber 损失函数,由下式给出:

含义:

如果绝对误差低于1,则使用平方项,否则使用绝对项。它对离群值的敏感性不如均方误差损失,并且在某些情况下可以防止爆炸梯度。在均方误差损失中,我们对差进行平方,得出的差值远大于原始差值。这些高值导致爆炸的梯度。此处避免这种情况,因为对于大于1的数字,数字不平方。

使用场景:

+回归。

+当 要素具有较大的值时。

+非常适合大多数问题。

4. 负对数似然损失 NLLLoss

torch.nn.NLLLoss

负对数似然损失:

含义:

它使数据的整体概率最大化。当它以较小的概率预测正确的类别时,会对模型进行惩罚,而在以较高的概率进行预测时,则对模型进行激励。对数在这里起到惩罚作用。概率越小,对数越高。这里使用负号是因为概率在[0,1]范围内,并且该范围内的值的对数是负数。因此,它使损失值是正的。

使用场景:

+ 分类。

+更快,更小的培训。

+简单的任务。

5. 交叉熵损失 CrossEntropyLoss

torch.nn.CrossEntropyLoss,用来测量预测值和实际值之间的交叉熵。

其中x是真实标签的概率,y是预测标签的概率。

含义:

使用交叉熵作为损失函数可以用来学习数据的概率分布。虽然其他损失函数(如平方损失)会惩罚错误的预测,但是当以高置信度预测错误的预测时,交叉熵会带来更大的损失。与负对数似然损失的区别在于:交叉熵还会惩罚错误但可信的预测以及正确但不太可信的预测,而负对数损失不会根据预测的可信度进行惩罚。

使用场景:

+分类任务

+为了建立自信的模型,即模型不仅可以准确预测,而且还可以更高的概率进行预测。

+获得更高的精度/召回值。

6. Kullback-Leibler散度损失 KLDivLoss

torch.nn.KLDivLoss,其给出了两个概率分布如何彼此不同的度量。

其中x是真实标签的概率,y是预测标签的概率。

含义:

这与交叉熵损失非常相似。区别是预测概率与实际概率之间的差异。这将在模型训练中添加有关信息丢失的数据。预测概率分布离真实概率分布越远,损失越大。它不会像交叉熵损失那样基于预测的置信度对模型进行惩罚,但是预测与地面真实情况有何不同。它通常优于均方误差,尤其是在数据不是正态分布的情况下。交叉熵得到更广泛使用的原因是可以将其分解为交叉熵的函数。最小化交叉熵与最小化KL散度相同。

KL = — xlog(y / x)= xlog(x)— xlog(y)=熵—交叉熵

使用场景:

+ 分类

+交叉熵可以通过较少的计算来实现,因此请避免使用。

7. MarginRankingLoss

torch.nn.MarginRankingLoss,它测量给定输入x1,x2和带有值(1或-1)的标签张量y的损耗。如果y == 1,则假定第一个输入的排名应高于第二个输入,反之亦然。

含义:

分类器的预测y基于输入x1和x2的排名。假设余量的默认值为0,如果y和(x1-x2)具有相同的符号,则损失将为零。这意味着x1 / x2的排名更高(对于y = 1 / -1),正如数据所期望的那样。如果y和(x1-x2)具有相反的符号,则损耗将是y *(x1-x2)给出的非零值。尽管在Pytorch中使用它的方式尚不清楚,但与其他损失函数相比,还没有太多的开源实现和示例。

使用场景:

+ GAN。

+排名任务。

8. HingeEmbeddingLoss

torch.nn.HingeEmbeddingLoss,在输入张量x和包含值(1或-1)的标签张量y的情况下测量损耗。它用于测量两个输入是否相似。

含义:

分类器的预测y基于输入x的值。假设裕度的默认值为1,如果y = -1,那么损失将最大为0和(1 — x)。如果x > 0损耗将是x本身(较高的值),如果0 < x <1损耗将是1 — x(较小的值),并且如果x <0损耗将是0(最小值)。对于y = 1,损耗与x的值一样高。

使用场景:

+学习非线性嵌入

+半监督学习

+要测量两个输入的相似性或相异性。

9. cosine 损失 CosineEmbeddingLoss

torch.nn.CosineEmbeddingLoss,它测量给定输入x1,x2和包含值(1或-1)的标签张量y的损耗。它用于测量两个输入是否相似。

含义:

分类器的预测y基于输入x1和x2的余弦距离。余弦距离是指两点之间的角度。通过使用点乘积可以很容易地找到它:

由于余弦介于-1和+ 1之间,损耗值较小。这有助于计算。假设margin为默认值0,如果y = 1,则损失为(1-cos(x1,x2))。对于y = -1,则损耗将最大为0和cos (x1,x2)。如果cos (x1,x2) > 0,则损耗将是cos (x1,x2)本身(较高的值),如果cos (x1,x2) <0,则损耗将为0(最小值)。

使用场景:

+学习非线性嵌入

+半监督学习

+要测量两个输入的相似性或相异性。

·  END  ·

HAPPY LIFE

Pytorch损失函数篇相关推荐

  1. 手撕 CNN 经典网络之 VGGNet(PyTorch实战篇)

    大家好,我是红色石头! 在上一篇文章: 手撕 CNN 经典网络之 VGGNet(理论篇) 详细介绍了 VGGNet 的网络结构,今天我们将使用 PyTorch 来复现VGGNet网络,并用VGGNet ...

  2. 都2021年了,不会还有人连深度学习都不了解吧(三)- 损失函数篇

    一.前言 深度学习系列文章陆陆续续已经发了两篇,分别是激活函数篇和卷积篇,纯干货分享,想要入门深度学习的童鞋不容错过噢!书接上文,该篇文章来给大家介绍" 选择对象的标准 "-- 损 ...

  3. 【Pytorch深度学习50篇】·······第六篇:【常见损失函数篇】-----BCELoss及其变种

    新年新气象,兄弟们新年快乐.撒花!!! 之前我们的项目已经讲过了常见的4种深度学习任务(当然还有一些没有接触到的,例如GAN和今年大红的Transformer),今天这个blog我们就来谈谈一谈常见的 ...

  4. 手撕 CNN 之 AlexNet(PyTorch 实战篇)

    大家好,我是红色石头! 在上一篇文章: 手撕 CNN 经典网络之 AlexNet(理论篇) 详细介绍了 AlexNet 的网络结构,今天我们将使用 PyTorch 来复现AlexNet网络,并用Ale ...

  5. pytorch 损失函数总结

    PyTorch深度学习实战 4 损失函数 损失函数,又叫目标函数,是编译一个神经网络模型必须的两个参数之一.另一个必不可少的参数是优化器. 损失函数是指用于计算标签值和预测值之间差异的函数,在机器学习 ...

  6. 【深度学习】手撕 CNN 之 AlexNet(PyTorch 实战篇)

    今天我们将使用 PyTorch 来复现AlexNet网络,并用AlexNet模型来解决一个经典的Kaggle图像识别比赛问题. 正文开始! 1. 数据集制作 在论文中AlexNet作者使用的是ILSV ...

  7. Pytorch损失函数losses简介

    一般来说,监督学习的目标函数由损失函数和正则化项组成.(Objective = Loss + Regularization) Pytorch中的损失函数一般在训练模型时候指定. 注意Pytorch中内 ...

  8. Pytorch —— 损失函数(二)

    目录 5.nn.L1Loss 6.nn.MSELoss 7.nn.SmoothL1Loss 8.nn.PoissonNLLLoss 9.nn.KLDivLoss 10.nn.MarginRanking ...

  9. Pytorch:损失函数

    4.1.4 损失函数 在深度学习中要用到各种各样的损失函数(loss function),这些损失函数可看作是一种特殊的layer,PyTorch也将这些损失函数实现为nn.Module的子类.然而在 ...

最新文章

  1. 应该知道的自动化测试陷阱2
  2. apache 部署python3_flask+apache2+wsgi+python3 部署(挖坑记)
  3. Tkinter的Menubutton组件
  4. GDCM:LCNumeric的测试程序
  5. skype for business 无法共享桌面、无法传输图片
  6. [设计模式] ------ 对比总结:简单工厂模式、工厂方法模式、抽象工厂模式
  7. Oracle解锁scott账号
  8. IEumberable和IQueryable的区别
  9. 一步一步写算法(之通用数据结构)
  10. 二分法的样例 题解
  11. 跟屌丝大哥学DB2-第四课 数据类型 ,表 ,视图,索引,模式,约束(一)
  12. gdb调试动态链接so
  13. 什么是TensorFlow
  14. 零基础自学Python好难?学起来很吃力,想放弃?看看别人是怎样学习的
  15. Discuz!教程之当插件、门户或自定义页面设置成首页时手机版访问跳转到forum.php?mobile=yes的问题
  16. 【BZOJ】4084: [Sdoi2015]双旋转字符串 哈希
  17. Openstack-T 之Neutron
  18. 【算法】算法学习网站
  19. sigar获取进程信息
  20. 【云计算】2_云服务器产品介绍

热门文章

  1. 哪些专科学校计算机师资好,计算机专科学校排名前十(最出名的10所计算机学院)...
  2. 武汉哪所技术学校学计算机好,武汉计算机专业学校排名
  3. 《淘宝网开店 进货 运营 管理 客服 实战200招》——1.5 网上开店要具备哪些软件条件...
  4. 解决部分安卓机 自带浏览器 上h5页面 rem布局 受到 真机字体影响的问题
  5. VS 无签名UTF-8和带签名UTF-8格式
  6. Elasticsearch7.X-IK分词器
  7. 计算机考试中有关表格的题类型,2021年职称计算机考试中有关电子表格题型试题集.doc...
  8. 量子计算机基地边缘,量子计算机的临界点已经来临?
  9. 修改Linux系统时间EDT改为CST
  10. 安卓安装apk之后直接打开频繁重启、按home键返回,再次打开,重新启动