这篇教程pytorch中常用的损失函数用法说明写得很实用,希望能帮到您。 1. pytorch中常用的损失函数列举pytorch中的nn模块提供了很多可以直接使用的loss函数, 比如MSELoss(), CrossEntropyLoss(), NLLLoss() 等 官方链接: https://pytorch.org/docs/stable/_modules/torch/nn/modules/loss.html
pytorch中常用的损失函数 损失函数 | 名称 | 适用场景 | torch.nn.MSELoss() | 均方误差损失 | 回归 | torch.nn.L1Loss() | 平均绝对值误差损失 | 回归 | torch.nn.CrossEntropyLoss() | 交叉熵损失 | 多分类 | torch.nn.NLLLoss() | 负对数似然函数损失 | 多分类 | torch.nn.NLLLoss2d() | 图片负对数似然函数损失 | 图像分割 | torch.nn.KLDivLoss() | KL散度损失 | 回归 | torch.nn.BCELoss() | 二分类交叉熵损失 | 二分类 | torch.nn.MarginRankingLoss() | 评价相似度的损失 | | torch.nn.MultiLabelMarginLoss() | 多标签分类的损失 | 多标签分类 | torch.nn.SmoothL1Loss() | 平滑的L1损失 | 回归 | torch.nn.SoftMarginLoss() | 多标签二分类问题的损失 | 多标签二分类 | 2. 比较CrossEntropyLoss() 和NLLLoss()(1). CrossEntropyLoss():torch.nn.CrossEntropyLoss(weight=None, # 1D张量,含n个元素,分别代表n类的权重,样本不均衡时常用 size_average=None, ignore_index=-100, reduce=None, reduction='mean' ) 参数: weight: 1D张量,含n个元素,分别代表n类的权重,样本不均衡时常用, 默认为None. 计算公式: weight = None时: 
weight ≠ None时: 
输入: output: 网络未加softmax的输出 target: label值(0,1,2 不是one-hot) 代码: loss_func = CrossEntropyLoss(weight=torch.from_numpy(np.array([0.03,0.05,0.19,0.26,0.47])).float().to(device) ,size_average=True)loss = loss_func(output, target) (2). NLLLoss():torch.nn.NLLLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean') 输入: output: 网络在logsoftmax后的输出 target: label值(0,1,2 不是one-hot) 代码: loss_func = NLLLoss(weight=torch.from_numpy(np.array([0.03,0.05,0.19,0.26,0.47])).float().to(device) ,size_average=True)loss = loss_func(output, target)
(3). 二者总结比较:总之, CrossEntropyLoss() = softmax + log + NLLLoss() = log_softmax + NLLLoss(), 具体等价应用如下:
####################---CrossEntropyLoss()---####################### loss_func = CrossEntropyLoss()loss = loss_func(output, target) ####################---Softmax+log+NLLLoss()---#################### self.softmax = nn.Softmax(dim = -1) x = self.softmax(x)output = torch.log(x) loss_func = NLLLoss()loss = loss_func(output, target) ####################---LogSoftmax+NLLLoss()---###################### self.log_softmax = nn.LogSoftmax(dim = -1) output = self.log_softmax(x) loss_func = NLLLoss()loss = loss_func(output, target) 补充:常用损失函数用法小结之Pytorch框架 在用深度学习做图像处理的时候,常用到的损失函数无非有四五种,为了方便Pytorch使用者,所以简要做以下总结 1)L1损失函数预测值与标签值进行相差,然后取绝对值,根据实际应用场所,可以设置是否求和,求平均,公式可见下,Pytorch调用函数:nn.L1Loss 
2)L2损失函数预测值与标签值进行相差,然后取平方,根据实际应用场所,可以设置是否求和,求平均,公式可见下,Pytorch调用函数:nn.MSELoss 
3)Huber Loss损失函数简单来说就是L1和L2损失函数的综合版本,结合了两者的优点,公式可见下,Pytorch调用函数:nn.SmoothL1Loss 
4)二分类交叉熵损失函数简单来说,就是度量两个概率分布间的差异性信息,在某一程度上也可以防止梯度学习过慢,公式可见下,Pytorch调用函数有两个,一个是nn.BCELoss函数,用的时候要结合Sigmoid函数,另外一个是nn.BCEWithLogitsLoss() 
5)多分类交叉熵损失函数也是度量两个概率分布间的差异性信息,Pytorch调用函数也有两个,一个是nn.NLLLoss,用的时候要结合log softmax处理,另外一个是nn.CrossEntropyLoss 以上为个人经验,希望能给大家一个参考,也希望大家多多支持51zixue.net。 Pytorch训练网络过程中loss突然变为0的解决方案 Pytorch BCELoss和BCEWithLogitsLoss的使用 |