PyTorch中提供了很多种损失函数,常用于分类的是 torch.nn.BCELoss()、torch.nn.BCEWithLogitsLoss() 和 torch.nn.CrossEntropyLoss()
其中,torch.nn.BCELoss()、torch.nn.BCEWithLogitsLoss() 用于二分类问题, torch.nn.CrossEntropyLoss() 既可用于二分类又可用于多分类
以下对这三项进行辨析(PyTorch 1.8.0)
1、torch.torch.nn.BCELoss()
此损失函数衡量输出与目标之间的二分类交叉熵
torch.torch.nn.BCELoss(weight=None, reduction='mean')
weight:默认 None,用于计算损失的手动尺度化的权重,张量
reduction:默认 'mean',指定应用于输出的缩减方式,另可选 'none','sum';'none':不应用缩减;'mean':输出的和除以输出内元素数;'sum':输出加和
输入:input -- 形状为,
为样本数量,
为任意其他维度
输入:target -- 形状,形状同input
输出:output -- 标量(reduction若为none,则形状同input)
未缩减的 loss 可以表示为:
其中是 batch 的大小;
如果参数 reduction 不是 'none',则有: