损失函数概念
损失函数:衡量模型输出与真实标签的差距
损失函数(Loss Function):
代价函数(Cost Function):
目标函数(Objective Function):
class _Loss(Module):
def __init__(self, size_average=None, reduce=None, reduction='mean'):
super(_Loss, self).__init__()
if size_average is not None or reduce is not None:
self.reduction = _Reduction.legacy_get_string(size_average, reduce)
else:
self.reduction = reduction
交叉熵损失函数
交叉熵 = 信息熵 + 相对熵
交叉熵:
自信息:
熵:
相对熵:
交叉熵:
NLL/BCE/BCEWithLogits Loss
nn.CrossEntropyLoss(#nn.LogSoftmax ()与nn.NLLLoss()结合,进行交叉熵计算
weight=None, #各类别的loss设置权值
size_average=None,
ignore_index=-100, #忽略某个类别
reduce=None,
#计算模式,可为none/sum/mean
#none- 逐个元素计算
#sum- 所有元素求和,返回标量
#mean- 加权平均,返回标量
reduction='mean'
)
nn.NLLLoss(#实现负对数似然函数中的负号功能
weight=None,#各类别的loss设置权值
size_average=None,
ignore_index=-100, #各类别的loss设置权值
reduce=None,
#计算模式,可为none/sum/mean
#none-逐个元素计算
#sum-所有元素求和,返回标量
#mean-加权平均,返回标量
reduction='mean'
)
nn.BCELoss(#二分类交叉熵,注意事项:输入值取值在[0,1]
weight=None, #各类别的loss设置权值
size_average=None,
reduce=None,
reduction='mean'
)
nn.BCEWithLogitsLoss(#结合Sigmoid与二分类交叉熵,注意事项:网络最后不加sigmoid函数
weight=None, #各类别的loss设置权值
size_average=None,
reduce=None,
reduction='mean',
pos_weight=None#正样本的权值
)