当前位置:   article > 正文

pytorch学习笔记十一:损失函数_pytorch中的损失函数auc

pytorch中的损失函数auc

一、损失函数是什么

损失函数:衡量模型输出与真实标签之间的差异。与损失函数有关的还有代价函数和目标函数。

  • 损失函数(Loss Function):计算一个样本的差异, L o s s = f ( y ^ , y ) Loss=f\left ( \hat{y},y \right ) Loss=f(y^,y)
  • 代价函数(Cost Function):计算整个训练集loss的一个平均值, c o s t = 1 N ∑ i N f ( y ^ , y ) cos t= \frac{1}{N}\sum_{i}^{N}f\left ( \hat{y},y \right ) cost=N1iNf(y^,y)
  • 目标函数(Objective Function):衡量模型的整体拟合程度,过拟合和欠拟合,obj = cost + Regularization

所以在衡量模型的输出和真实标签之间的差异时的损失函数其实是指代价函数,下面看一下pytorch中的损失函数:
在这里插入图片描述
_loss也继承了nn.Module类,说明loss也是一层,也有nn.Module中的8个参数字典。参数有size_average、reduce、reduction,其中size_average和reduce已经被舍弃不再使用,重点关注reduction参数。下面以人民币的二分类中交叉熵损失函数为例,看损失函数是如何创建和使用的,背后运行的机制是什么?

# 在train.py文件的损失函数创建处打上断点,进行调试
criterion = nn.CrossEntropyLoss()
  • 1
  • 2

可看出程序进入到了loss.py文件中的 CrossEntropyLoss(_WeightedLoss):交叉熵损失类的__init__方法, 这里发现交叉熵损失函数继承_WeightedLoss这个类:
在这里插入图片描述
继续debug,就到了class _WeightedLoss(_Loss):这个类里面,就会发现这个类继承_Loss, 那么我们继续步入,就到了_Loss这个类里面去,会发现这个继承Module
在这里插入图片描述
在这里插入图片描述
在_loss中继承了Module类,所以损失函数的初始化和模型的初始化类似,也调用了Module初始化方法,最终会有8个属性字典,如下:
在这里插入图片描述
然后在_loss类中设置reduction参数,至此,损失函数的创建过程已完成。下面看一下损失函数的运行机制

# 在此处设置断点,损失函数前向传播
loss = criterion(outputs, labels)
  • 1
  • 2

在这里插入图片描述
损失函数_loss继承了Module,那么在前向传播时也会调用Module的forward方法,继续debug可看到
在这里插入图片描述
在这里插入图片描述所以在forward中调用了F中对应的损失函数,而cross_entroy又是由nll_loss计算而来。以上就是损失函数的创建和内部运行机制。
下面来看pytorch中损失函数的具体使用。

常见损失函数

官网链接

1、交叉熵损失 CrossEntropyLoss

nn.CrossEntropyLoss: nn.LogSortmax() 与 nn.NLLLoss() 结合,进行交叉熵计算。

torch.nn.CrossEntropyLoss(weight=None, 
                          size_average=None, 
                          ignore_index=- 100, 
                          reduce=None, 
                          reduction='mean', label_smoothing=0.0)
  • 1
  • 2
  • 3
  • 4
  • 5

参数:

  • weight:各类别的loss设置权值
  • ignore_index:忽略某个类别
  • reduction:计算模式,可为none/sum/mean,none 表示逐个元素计算,这样有多少个样本就会返回多少个 loss。sum 表示所有元素的 loss求和,返回标量,mean 所有元素的 loss 求加权平均(加权平均的含义下面会提到),返回标量。

在了解交叉熵之前先来了解几个概念:
自信息:单个事件的不确定性, I ( x ) = − l o g [ p ( x ) ] I(x) = -log[p(x)] I(x)=log[p(x)]
熵(信息熵):描述一个事件的不确定性,一个事件越不确定,熵越大, H ( P ) = E x ∼ p [ I ( x ) ] = − ∑ i N P ( x i ) l o g P ( x i ) H(P)=E_{x\sim p}[I(x)] = -\sum_{i}^{N}P(x_{i})logP(x_{i}) H(P)=Exp[I(x)]=iNP(xi)logP(xi)
交叉熵:衡量两个分布之间的差异程度,P表示数据的原始分布,Q表示模型的输出分布,交叉熵越小说明两个分布越接近 , H ( P , Q ) = − ∑ i = 1 N P ( x i ) l o g Q ( x i ) H(P, Q) = -\sum_{i=1}^{N}P(x_{i})logQ(x_{i}) H(P,Q)=

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号