文章目录
- 1. 什么是损失函数
- 2. PyTorch中的损失函数
- 2.1 nn.CrossEntropyLoss
- 2.2 nn.NLLLoss
- 2.3 nn.BCELoss
- 2.4 nn.BCEWithLogitsLoss
- 2.5 nn.L1Loss
- 2.6 nn.MSELoss
- 2.7 nn.SmoothL1Loss
- 2.8 nn.PoissonNLLLoss
- 2.9 nn.KLDivLoss
- 2.10 nn.MarginRankingLoss
- 2.11 nn.MultiLabelMarginLoss
- 2.12 nn.SoftMarginLoss
- 2.13 nn.MultiLabelSoftMarginLoss
- 2.14 nn.MultiMarginLoss
- 2.15 nn.TripletMarginLoss
- 2.16 nn.HingeEmbeddingLoss
- 2.17 nn.CosineEmbedingLoss
- 2.18 nn.CTCLoss
- 2.16 nn.HingeEmbeddingLoss
- 2.17 nn.CosineEmbedingLoss
- 2.18 nn.CTCLoss
1. 什么是损失函数
衡量模型输出与真实标签的差异
-
损失函数:计算一个样本的差异
L o s s = f ( y ^ − y ) Loss=f(\hat{y}-y) Loss=f(y^−y) -
代价函数:计算整个样本的损失函数的平均值
C o s t = 1 n ∑ i = 1 n f ( y ^ − y ) Cost=\frac{1}{n}\sum_{i=1}^n f(\hat{y}-y) Cost=n1i=1∑nf(y^−y) -
目标函数
O b j = C o s t + R e g u l a r i z a t i o n Obj=Cost+Regularization Obj=Cost+Regularization
size_average 和 reduce后期版本将被舍弃,不要再用了
2. PyTorch中的损失函数
2.1 nn.CrossEntropyLoss
-
功能:
nn.LogSoftmax()
与nn.NLLLoss()
结合,进行交叉熵计算nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-100, reduce=None,reduction='mean')
-
主要参数:
- weight:各类别的loss设置权值
对于分类问题,每个分类都有一个loss函数值,此参数就是每个分类的权重 - ignore_index:忽略某个类别,不参与计算loss函数值
- reduction:计算模式,可为
none
、sum
、mean
- none:逐个元素计算,返回长度为类别数
- sum:所有元素求和返回标量,一个值的Tensor
- mean:加权平均返回标量,一个值的Tensor
- weight:各类别的loss设置权值
2.2 nn.NLLLoss
- 功能:实现负对数似然函数中的负号功能
- 主要参数:
- weight:各类别的loss设置权值
对于分类问题,每个分类都有一个loss函数值,此参数就是每个分类的权重 - ignore_index:忽略某个类别,不参与计算loss函数值
- reduction:计算模式,可为
none
、sum
、mean
- none:逐个元素计算,返回长度为类别数
- sum:所有元素求和返回标量,一个值的Tensor
- mean:加权平均返回标量,一个值的Tensor
- weight:各类别的loss设置权值
2.3 nn.BCELoss
-
功能:二分类交叉熵
注意,输入值取值在 [ 0 , 1 ] [0,1] [0,1]
- 主要参数:
- weight:各类别的loss设置权值
对于分类问题,每个分类都有一个loss函数值,此参数就是每个分类的权重 - ignore_index:忽略某个类别,不参与计算loss函数值
- reduction:计算模式,可为
none
、sum
、mean
- none:逐个元素计算,返回长度为类别数
- sum:所有元素求和返回标量,一个值的Tensor
- mean:加权平均返回标量,一个值的Tensor
- weight:各类别的loss设置权值
2.4 nn.BCEWithLogitsLoss
-
功能:结合Sigmoid与二分类交叉熵
注意,网络最后不需要加sigmoid激活函数了
- 主要参数:
- pos_weight:正样本的权值
- weight:各类别的loss设置权值
对于分类问题,每个分类都有一个loss函数值,此参数就是每个分类的权重 - ignore_index:忽略某个类别,不参与计算loss函数值
- reduction:计算模式,可为
none
、sum
、mean
- none:逐个元素计算,返回长度为类别数
- sum:所有元素求和返回标量,一个值的Tensor
- mean:加权平均返回标量,一个值的Tensor
2.5 nn.L1Loss
-
功能:计算inputs与target之差的绝对值( l 1 l_1 l1范数误差)
nn.L1Loss(size_average=None, reduce=None, reduction='mean')
2.6 nn.MSELoss
- 功能:计算inputs和target之差的平方( l 2 l_2 l2范数误差,或者 m 2 m_2 m2范数误差)
nn.MSELoss(size_average=None, reduce=None, reduction='mean')
2.7 nn.SmoothL1Loss
- 功能:平滑的 l 1 l_1 l1 loss
2.8 nn.PoissonNLLLoss
- 功能:破松分布的负对数似然函数
- 主要参数:
- log_input:输入是否为对数形式,决定计算公式
- full:计算所有loss,默认False
- eps:修正项,避免 log ( i n p u t ) \log(input) log(input) 为 N a N NaN NaN
2.9 nn.KLDivLoss
- 功能:计算KL散度,相对熵
2.10 nn.MarginRankingLoss
- 功能:计算两个向量之间的相似度,用于排序任务
2.11 nn.MultiLabelMarginLoss
- 功能:多标签边界损失函数
2.12 nn.SoftMarginLoss
- 功能:计算二分类的Logistic损失
2.13 nn.MultiLabelSoftMarginLoss
- 功能:SoftMarginLoss的多标签版本
2.14 nn.MultiMarginLoss
- 功能:计算多分类的折页损失
2.15 nn.TripletMarginLoss
- 功能:计算三元组损失,人脸验证中常用
2.16 nn.HingeEmbeddingLoss
- 功能:计算两个输入的相似性,常用于迁移学习和半监督学习
2.17 nn.CosineEmbedingLoss
- 功能:采用余弦相似度计算两个输入的相似性
2.18 nn.CTCLoss
- 功能:计算CTC损失,解决时序类数据的分类损失,人脸验证中常用
2.16 nn.HingeEmbeddingLoss
- 功能:计算两个输入的相似性,常用于迁移学习和半监督学习
2.17 nn.CosineEmbedingLoss
- 功能:采用余弦相似度计算两个输入的相似性
2.18 nn.CTCLoss
- 功能:计算CTC损失,解决时序类数据的分类