文章目录
- 一.损失函数概念
- 二.Pytorch内置损失函数
- 1、nn.CrossEntropyLoss
- 2、 nn.NLLLoss
- 3、 nn.BCELoss
- 4、 nn.BCEWithLogitsLoss
- 5、 nn.L1Loss
- 6 、nn.MSELoss
- 7、 nn.SmoothL1Loss
- 8、 nn.PoissonNLLLoss
- 9、 nn.KLDivLoss
- 10、 nn.MarginRankingLoss
- 11、 nn.MultiLabelMarginLoss
- 12、 nn.SoftMarginLoss
- 13、 nn.MultiLabelSoftMarginLoss
- 14、 nn.MultiMarginLoss
- 15、 nn.TripletMarginLoss
- 16、 nn.HingeEmbeddingLoss
- 17、 nn.CosineEmbeddingLoss
- 18、 nn.CTCLoss
一.损失函数概念
损失函数(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
- none- 逐个元素计算
- sum- 所有元素求和,返回标量
- 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