一、损失函数的概念
损失函数:用来衡量模型输出与真实标签的差异,计算一个样本的一个差异
代价函数:计算整个训练集loss的均值
目标函数:等于代价函数加上正则项
二、常见的损失函数
如下图所示,loss方法也是继承了module类,所以loss也是一个模块,同样具有forward函数
以交叉熵损失函数为例,进行代码展示
from torch.nn import CrossEntropyLoss
# 实例化交叉熵损失函数
loss_function = CrossEntropyLoss()
# 使用交叉熵损失函数计算损失
loss = loss_function(output, label)
1、交叉熵损失函数(适用于分类任务)
nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction=‘mean’)
功能:nn.LogSoftmax()和nn.NLLLoss()结合, 进行交叉熵计算,由softmax归一化成概率值分布再进行计算损失
参数:
weight:各类别的loss设置权值
ignore_index:忽略某个类别
reduction:计算模式,可为none/sum/mean(none:逐元素计算;sum:所有元素求和,返回标量;mean:加权平均,返回标量)
2、负对数似然损失函数
nn.NLLLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction=‘mean’)
功能:实现负对数似然函数中的负数功能
参数:
weight:各类别的loss设置权值
ignore_index:忽略某个类别
reduction:计算模式,可为none/sum/mean(none:逐元素计算;sum:所有元素求和,返回标量;mean:加权平均,返回标量)
3、二分类交叉熵损失函数
nn.BCELoss(weight=None, size_average=None,reduce=None, ignore_index=-100, reduction=‘mean’)
功能:二分类交叉熵
注意:输入值取值在【0,1】,如果输入值不在【0,1】就会报错,需要手动使用torch.sigmoid(input)进行标准化
参数:
weight:各类别的loss设置权值
ignore_index:忽略某个类别
reduction:计算模式,可为none/sum/mean(none:逐元素计算;sum:所有元素求和,返回标量;mean:加权平均,返回标量)
4、改进的二分类交叉熵
nn.BCEWithLogitLoss(weight=None, size_average=None,reduce=None, ignore_index=-100, reduction=‘mean’, pos_weight=None)
功能:结合sigmoid与二分类交叉熵
注意:不需要再手动添加标准化
参数:
pos_weight:正样本的权值
weight:各类别的loss设置权值
ignore_index:忽略某个类别
reduction:计算模式,可为none/sum/mean(none:逐元素计算;sum:所有元素求和,返回标量;mean:加权平均,返回标量)