Pytorch损失函数篇
点击关注我哦
一篇文章带你了解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损失函数篇相关推荐
- 手撕 CNN 经典网络之 VGGNet(PyTorch实战篇)
大家好,我是红色石头! 在上一篇文章: 手撕 CNN 经典网络之 VGGNet(理论篇) 详细介绍了 VGGNet 的网络结构,今天我们将使用 PyTorch 来复现VGGNet网络,并用VGGNet ...
- 都2021年了,不会还有人连深度学习都不了解吧(三)- 损失函数篇
一.前言 深度学习系列文章陆陆续续已经发了两篇,分别是激活函数篇和卷积篇,纯干货分享,想要入门深度学习的童鞋不容错过噢!书接上文,该篇文章来给大家介绍" 选择对象的标准 "-- 损 ...
- 【Pytorch深度学习50篇】·······第六篇:【常见损失函数篇】-----BCELoss及其变种
新年新气象,兄弟们新年快乐.撒花!!! 之前我们的项目已经讲过了常见的4种深度学习任务(当然还有一些没有接触到的,例如GAN和今年大红的Transformer),今天这个blog我们就来谈谈一谈常见的 ...
- 手撕 CNN 之 AlexNet(PyTorch 实战篇)
大家好,我是红色石头! 在上一篇文章: 手撕 CNN 经典网络之 AlexNet(理论篇) 详细介绍了 AlexNet 的网络结构,今天我们将使用 PyTorch 来复现AlexNet网络,并用Ale ...
- pytorch 损失函数总结
PyTorch深度学习实战 4 损失函数 损失函数,又叫目标函数,是编译一个神经网络模型必须的两个参数之一.另一个必不可少的参数是优化器. 损失函数是指用于计算标签值和预测值之间差异的函数,在机器学习 ...
- 【深度学习】手撕 CNN 之 AlexNet(PyTorch 实战篇)
今天我们将使用 PyTorch 来复现AlexNet网络,并用AlexNet模型来解决一个经典的Kaggle图像识别比赛问题. 正文开始! 1. 数据集制作 在论文中AlexNet作者使用的是ILSV ...
- Pytorch损失函数losses简介
一般来说,监督学习的目标函数由损失函数和正则化项组成.(Objective = Loss + Regularization) Pytorch中的损失函数一般在训练模型时候指定. 注意Pytorch中内 ...
- Pytorch —— 损失函数(二)
目录 5.nn.L1Loss 6.nn.MSELoss 7.nn.SmoothL1Loss 8.nn.PoissonNLLLoss 9.nn.KLDivLoss 10.nn.MarginRanking ...
- Pytorch:损失函数
4.1.4 损失函数 在深度学习中要用到各种各样的损失函数(loss function),这些损失函数可看作是一种特殊的layer,PyTorch也将这些损失函数实现为nn.Module的子类.然而在 ...
最新文章
- 应该知道的自动化测试陷阱2
- apache 部署python3_flask+apache2+wsgi+python3 部署(挖坑记)
- Tkinter的Menubutton组件
- GDCM:LCNumeric的测试程序
- skype for business 无法共享桌面、无法传输图片
- [设计模式] ------ 对比总结:简单工厂模式、工厂方法模式、抽象工厂模式
- Oracle解锁scott账号
- IEumberable和IQueryable的区别
- 一步一步写算法(之通用数据结构)
- 二分法的样例 题解
- 跟屌丝大哥学DB2-第四课 数据类型 ,表 ,视图,索引,模式,约束(一)
- gdb调试动态链接so
- 什么是TensorFlow
- 零基础自学Python好难?学起来很吃力,想放弃?看看别人是怎样学习的
- Discuz!教程之当插件、门户或自定义页面设置成首页时手机版访问跳转到forum.php?mobile=yes的问题
- 【BZOJ】4084: [Sdoi2015]双旋转字符串 哈希
- Openstack-T 之Neutron
- 【算法】算法学习网站
- sigar获取进程信息
- 【云计算】2_云服务器产品介绍
热门文章
- 哪些专科学校计算机师资好,计算机专科学校排名前十(最出名的10所计算机学院)...
- 武汉哪所技术学校学计算机好,武汉计算机专业学校排名
- 《淘宝网开店 进货 运营 管理 客服 实战200招》——1.5 网上开店要具备哪些软件条件...
- 解决部分安卓机 自带浏览器 上h5页面 rem布局 受到 真机字体影响的问题
- VS 无签名UTF-8和带签名UTF-8格式
- Elasticsearch7.X-IK分词器
- 计算机考试中有关表格的题类型,2021年职称计算机考试中有关电子表格题型试题集.doc...
- 量子计算机基地边缘,量子计算机的临界点已经来临?
- 修改Linux系统时间EDT改为CST
- 安卓安装apk之后直接打开频繁重启、按home键返回,再次打开,重新启动