Pytorch - Cross Entropy Loss
Pytorch 提供的交叉熵相关的函数有:
1. CrossEntropyLoss
class torch.nn.CrossEntropyLoss(weight=None, size_average=True, ignore_index=-100, reduce=True)[source]
作用
针对单目标分类问题, 结合了 nn.LogSoftmax() 和 nn.NLLLoss() 来计算 loss.
用于训练 C C 类别classes 的分类问题.
参数
weight
是 1D Tensor, 分别对应每个类别class 的权重. 对于类别不平衡的训练数据集比较有用.输入
input
包含了每一类别的概率或score.输入 input Tensor 的大小是 或 (minibatch,C,d1,d2,...,dK) ( m i n i b a t c h , C , d 1 , d 2 , . . . , d K ) . K≥2 K ≥ 2 表示 K K -dim 场景.
输入 target 是类别class 的索引( , C C 是类别classes 总数.)
loss(x,class)=−x[class]+log(∑jexp(x[j])) l o s s ( x , c l a s s ) = − x [ c l a s s ] + l o g ( ∑ j e x p ( x [ j ] ) )
带
weight
形式:loss(x,class)=weight[class](−x[class]+log(∑jexp(x[j]))) l o s s ( x , c l a s s ) = w e i g h t [ c l a s s ] ( − x [ c l a s s ] + l o g ( ∑ j e x p ( x [ j ] ) ) )
losses 在 minibatch 内求平均.
也支持高维输入 inputs, 如 2D images, 则会逐元素计算 NLL Loss.
参数:
weight(Tensor, optional) - 每个类别class 的权重. 默认为值为 1 的 Tensor.
size_average(bool, optional) – 默认为 True.
size_average=True, 则 losses 在 minibatch 结合 weight 求平均average.
size_average=False, 则losses 在 minibatch 求相加和sum.
当 reduce=False 时,忽略该参数.
ignore_index(int, optional) - 指定忽略的 target 值, 不影响 input 梯度计算.
当 size_average=True, 对所有非忽略的 targets 求平均.
reduce(bool, optional) - 默认为 True.
reduce=True, 则 losses 在 minibatch 求平均或相加和.
reduce=False, 则 losses 返回 per batch 值, 并忽略 size_average.
输入 - input x,