一.损失函数概念
损失函数(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’)
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()
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
|