Pytorch教程[07]损失函数

一.损失函数概念

损失函数(loss function):衡量模型输出与真实标签的差异
也叫代价函数(cost function)/准则(criterion)/目标函数(objective function)/误差函数(error function)
名字有很多,其实都是一个东西

二.Pytorch内置损失函数

1、nn.CrossEntropyLoss

功能: nn.LogSoftmax ()与nn.NLLLoss ()结合,进行
交叉熵计算
主要参数:
• weight:各类别的loss设置权值
• ignore _index:忽略某个类别
• reduction:计算模式,可为none/sum /mean

  1. none- 逐个元素计算
  2. sum- 所有元素求和,返回标量
  3. mean- 加权平均,返回标量
    在这里插入图片描述
nn.CrossEntropyLoss(weight=None, 
					size_average=None, 
					ignore_index=-100, 
					reduce=None, 
					reduction=‘mean’)
# Example of target with class indices
loss = nn.CrossEntropyLoss()
input = torch.randn(3, 5, requires_grad=True)
target = torch.empty(3, dtype=torch.long).random_(5)
output = loss(input, target)
output.backward()
# Example of target with class probabilities
input = torch.randn(3, 5, requires_grad=True)
target = torch.randn(3, 5).softmax(dim=1)
output = loss(input, target)
output.backward()

2、 nn.NLLLoss

功能:实现负对数似然函数中的负号功能
主要参数:
• weight:各类别的loss设置权值
• ignore _index:忽略某个类别
• reduction :计算模式,可为none/sum /m e an
none-逐个元素计算
sum-所有元素求和,返回标量
mean-加权平均,返回标量

nn.NLLLoss(weight=None,
		   size_average=None, 
		   ignore_index=-100, 
		   reduce=None, 
		   reduction='mean')

在这里插入图片描述

3、 nn.BCELoss

功能:二分类交叉熵
注意事项:输入值取值在[0,1]
主要参数:
• weight:各类别的loss设置权值
• ignore_index:忽略某个类别
• reduction :计算模式,可为none/sum /m e an
none-逐个元素计算
sum-所有元素求和,返回标量
mean-加权平均,返回标量

torch.nn.BCELoss(weight=None, 
				 size_average=None,
				 reduce=None, 
 				 reduction='mean')

4、 nn.BCEWithLogitsLoss

功能:结合Sigmoid与二分类交叉熵
注意事项:网络最后不加sigmoid函数
主要参数:
• pos _weight:正样本的权值
• weight:各类别的loss设置权值
• ignore _index:忽略某个类别
• reduction:计算模式,可为none/sum /m e an
none-逐个元素计算
sum-所有元素求和,返回标量
mean-加权平均,返回标量

nn.BCEWithLogitsLoss(weight=None, 
					 size_average=None, 
					 reduce=None, reduction='mean', 
					 pos_weight=None)

5、 nn.L1Loss

功能: 计算inputs与target之差的绝对值

6 、nn.MSELoss

功能: 计算inputs与target之差的平方
主要参数:
• reduction :计算模式,可为none/sum/mean
none- 逐个元素计算
sum- 所有元素求和,返回标量
mean- 加权平均,返回标量

7、 nn.SmoothL1Loss

功能:创建一个标准,如果绝对元素误差低于β,则使用平方项,否则使用L1项。它对异常值的敏感度低于torch.nn.MSELoss,并且在某些情况下可以防止爆炸梯度

  • size_average
  • reduce
  • reduction
  • beta

8、 nn.PoissonNLLLoss

功能:泊松分布的负对数似然损失函数
主要参数:
• log_input :输入是否为对数形式,决定计算公式
• full :计算所有loss,默认为False
• eps :修正项,避免log(input)为nan

9、 nn.KLDivLoss

功能:计算KLD(divergence),KL散度,相对熵
注意事项:需提前将输入计算 log-probabilities,
如通过nn.logsoftmax()
主要参数:
• reduction :none/sum/mean/batchmean
batchmean- batchsize维度求平均值
none- 逐个元素计算
sum- 所有元素求和,返回标量
mean- 加权平均,返回标量

10、 nn.MarginRankingLoss

功能:计算两个向量之间的相似度,用于排序任务
特别说明:该方法计算两组数据之间的差异,返回一个n*n
的 loss 矩阵
主要参数:
• margin :边界值,x1与x2之间的差异值
• reduction :计算模式,可为none/sum/mean
y = 1时, 希望x1比x2大,当x1>x2时,不产生loss
y = -1时,希望x2比x1大,当x2>x1时,不产生loss

11、 nn.MultiLabelMarginLoss

功能:多标签边界损失函数
举例:四分类任务,样本x属于0类和3类,
标签:[0, 3, -1, -1] , 不是[1, 0, 0, 1]
主要参数:
• reduction :计算模式,可为none/sum/mean

12、 nn.SoftMarginLoss

功能:计算二分类的logistic损失
主要参数:
• reduction :计算模式,可为none/sum/mean

13、 nn.MultiLabelSoftMarginLoss

功能:SoftMarginLoss多标签版本
主要参数:
• weight:各类别的loss设置权值
• reduction :计算模式,可为none/sum/mean

14、 nn.MultiMarginLoss

功能:计算多分类的折页损失
主要参数:
• p :可选1或2
• weight:各类别的loss设置权值
• margin :边界值
• reduction :计算模式,可为none/sum/mean

15、 nn.TripletMarginLoss

功能:计算三元组损失,人脸验证中常用
主要参数:
• p :范数的阶,默认为2
• margin :边界值
• reduction :计算模式,可为none/sum/mean

16、 nn.HingeEmbeddingLoss

功能:计算两个输入的相似性,常用于非线性embedding和半监督学习
特别注意:输入x应为两个输入之差的绝对值
主要参数:
• margin :边界值
• reduction :计算模式,可为none/sum/mean

17、 nn.CosineEmbeddingLoss

功能:采用余弦相似度计算两个输入的相似性
主要参数:
• margin :可取值[-1, 1] , 推荐为[0, 0.5]
• reduction :计算模式,可为none/sum/mean

18、 nn.CTCLoss

功能: 计算CTC损失,解决时序类数据的分类
Connectionist Temporal Classification
主要参数:
• blank :blank label
• zero_infinity :无穷大的值或梯度置0
• reduction :计算模式,可为none/sum/mean

猜你喜欢

转载自blog.csdn.net/weixin_43694096/article/details/123441628