pytorch教程 (四)- 损失函数

简介: pytorch教程 (四)- 损失函数

深度学习项目中首先对数据做数据预处理,然后构建模型之后,第三步需要定义一个好的损失函数。


配置损失函数都是确保模型以预期方式工作的最重要步骤之一。 损失函数可以为神经网络提供很多实用的灵活性,它将定义网络输出与网络其余部分的连接方式。


简单说损失函数(J)可以定义为具有两个参数的函数:

  1. 预测输出
  2. 真实输出


通过将模型的预测值与真实值进行比较,比较二个值之间的差距,差距越小,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。


一般来说,监督学习的目标函数由二部分组成:


1687235219769.png


传统深度学习损失函数


分类损失


二分类


在进行两个类之间的预测,通常让模型输出一个概率值,通过概率值阈值来判断,我们的样本属于那一类,通过概率判断属于哪一类需要用到一个激活函数,常见的使用S型函数,该函数将任何实际值压缩到0到1之间

b9181a741e2a4c91b2f42c3858cae439.png


由上图S函数图可知,随着sigmoid的输入变大并趋于正无穷大,的输出趋向于1。输入变小而趋向于负无穷大,输出将趋于0。现在我们保证总是得到一个介于0到1之间的值


在二分类中,我们可以认为一类为正样本,一类为负样本。

如果输出高于0.5(概率为50%),我们将认为它属于正类别;如果输出低于0.5,则我们将认为它属于负类别。例如,如果我们正在训练一个在猫和狗之间进行分类的网络,则可以为狗分配正类,并且在狗的数据集中的输出值将为1,类似地,将为猫分配负类,而对猫的输出值将为为0。


我们用于二进制分类的损失函数称为二进制交叉熵(BCE)。该功能有效地惩罚了用于二进制分类任务的神经网络

d102133c31274610af65682c3c5028fe.png1687235289144.png


多分类


当我们需要我们的模型每次预测一个可能的类输出时,多分类是合适的。 现在,由于我们仍在处理概率,因此将sigmoid应用于所有输出节点可能有意义,这样我们对于所有输出都获得介于0到1之间的值,但这是有问题的。 在考虑多个类别的概率时,我们需要确保所有单个概率的总和等于1,因为这是定义概率的方式。 应用S形(sigmoid)不能确保总和始终等于1,因此我们需要使用另一个激活函数。


我们在这种情况下使用的激活函数是softmax。 此功能确保所有输出节点的值都在0-1之间,并且所有输出节点值的总和始终等于1。 softmax的公式如下:


1687235341024.png

在pytorch api中常用的损失函数:

torch.nn.CrossEntropyLoss:(交叉熵,用于多分类,要求label为稀疏编码,输入未经过

nn.Softmax激活,对不平衡数据集可以用weigths参数调整类别权重)

torch.nn.NLLLoss:(负对数似然损失,用于多分类,要求label为稀疏编码,输入经过

nn.LogSoftmax激活)

torch.nn.CosineSimilarity:(余弦相似度,可用于多分类)


多标签分类


当模型需要预测多个类别作为输出时,便完成了多标签分类。 例如,假设您正在训练神经网络,以预测某些食物图片中的成分。 我们需要预测多种成分,因此Y中将有多个1’。


为此,我们不能使用softmax,因为softmax始终只会迫使一个类别变为1,而其他类别变为0。因此,由于我们试图预测每个类别的个体概率,因此可以简单地在所有输出节点值上保持sigmoid。


至于损失,我们可以直接在每个节点上使用对数损失进行求和,类似于在多类分类中所做的。


回归损失


在回归模型中,我们的神经网络将为每个我们试图预测的连续值提供一个输出节点。 通过在输出值和真实值之间进行直接比较来计算回归损失。

我们用于回归模型的最流行的损失函数是均方误差损失函数。 在此,我们仅计算Y和Y_pred之差的平方,并对所有数据求平均值。 假设有n个数据点:


1687235390839.png


均方误差损失函数

在这里,Y_i和Y_pred_i指的是数据集中第i个Y值,以及来自神经网络的相同数据的相应Y_pred


在pytorch api中常用的损失函数


torch.nn.MSELoss:(均方误差损失,也叫做L2损失,用于回归)

torch.nn.L1Loss:(L1损失,也叫做绝对值误差损失,用于回归)

torch.nn.Smooth1Loss:(平滑L1损失,当输入在-1到1之间时,平滑为L2损失,用于回归)



相关文章
|
2天前
|
存储 物联网 PyTorch
基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
**Torchtune**是由PyTorch团队开发的一个专门用于LLM微调的库。它旨在简化LLM的微调流程,提供了一系列高级API和预置的最佳实践
92 59
基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
|
18天前
|
机器学习/深度学习 算法 PyTorch
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
这篇文章详细介绍了多种用于目标检测任务中的边界框回归损失函数,包括IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU和WIOU,并提供了它们的Pytorch实现代码。
75 1
深度学习笔记(十三):IOU、GIOU、DIOU、CIOU、EIOU、Focal EIOU、alpha IOU、SIOU、WIOU损失函数分析及Pytorch实现
|
2月前
|
机器学习/深度学习
小土堆-pytorch-神经网络-损失函数与反向传播_笔记
在使用损失函数时,关键在于匹配输入和输出形状。例如,在L1Loss中,输入形状中的N代表批量大小。以下是具体示例:对于相同形状的输入和目标张量,L1Loss默认计算差值并求平均;此外,均方误差(MSE)也是常用损失函数。实战中,损失函数用于计算模型输出与真实标签间的差距,并通过反向传播更新模型参数。
|
3月前
|
并行计算 Ubuntu PyTorch
Ubuntu下CUDA、Conda、Pytorch联合教程
本文是一份Ubuntu系统下安装和配置CUDA、Conda和Pytorch的教程,涵盖了查看显卡驱动、下载安装CUDA、添加环境变量、卸载CUDA、Anaconda的下载安装、环境管理以及Pytorch的安装和验证等步骤。
425 1
Ubuntu下CUDA、Conda、Pytorch联合教程
|
6月前
|
PyTorch 算法框架/工具 异构计算
PyTorch 2.2 中文官方教程(二十)(4)
PyTorch 2.2 中文官方教程(二十)
104 0
PyTorch 2.2 中文官方教程(二十)(4)
|
6月前
|
Android开发 PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(二十)(2)
PyTorch 2.2 中文官方教程(二十)
103 0
PyTorch 2.2 中文官方教程(二十)(2)
|
6月前
|
iOS开发 PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(二十)(1)
PyTorch 2.2 中文官方教程(二十)
101 0
PyTorch 2.2 中文官方教程(二十)(1)
|
6月前
|
PyTorch 算法框架/工具 异构计算
PyTorch 2.2 中文官方教程(十九)(3)
PyTorch 2.2 中文官方教程(十九)
57 0
PyTorch 2.2 中文官方教程(十九)(3)
|
6月前
|
异构计算 PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(十九)(2)
PyTorch 2.2 中文官方教程(十九)
91 0
PyTorch 2.2 中文官方教程(十九)(2)
|
6月前
|
机器学习/深度学习 监控 PyTorch
PyTorch模型训练:优化器与损失函数的选择
【4月更文挑战第17天】PyTorch中的优化器(如SGD, Adam, RMSprop)和损失函数(如MSE Loss, Cross Entropy Loss)对模型训练效果有显著影响。优化器选择应基于任务复杂度和数据规模,SGD适合简单任务,而Adam和RMSprop适用于复杂情况。损失函数选择依赖于任务类型,MSE Loss用于回归,Cross Entropy Loss用于分类。实践中,应尝试不同组合,调整学习率,监控训练过程,并使用验证集优化模型。