CrossEntropyLoss¶
- class torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean', label_smoothing=0.0)[源代码]¶
此标准计算输入logits与目标之间的交叉熵损失。
在训练具有C个类别的分类问题时非常有用。 如果提供了可选参数
weight,它应该是一个一维的Tensor, 为每个类别分配权重。 当你有一个不平衡的训练集时,这特别有用。预期的输入包含每个类别的未归一化对数几率(通常不需要为正或总和为1)。 输入必须是一个大小为的张量,用于非批量输入, 或,其中用于K维情况。最后一种情况对于更高维度的输入很有用,例如计算2D图像每像素的交叉熵损失。
本标准期望的目标应包含以下任一内容:
类索引在范围 内,其中 是类的数量;如果 ignore_index 被指定,此损失也接受此类索引(此索引可能不一定在类范围内)。对于这种情况,未减少的(即
reduction设置为'none')损失可以描述为:其中 是输入, 是目标, 是权重, 是类别数量,并且 跨越小批量维度以及 对于 K 维情况。如果
reduction不是'none'(默认'mean'),则请注意,这种情况等同于对输入应用
LogSoftmax,然后是NLLLoss。每个类别的概率;当每个小批次项目需要多个类别标签时非常有用,例如用于混合标签、标签平滑等。在这种情况下,未减少的(即
reduction设置为'none')损失可以描述为:其中 是输入, 是目标, 是权重, 是类别数量,并且 跨越小批量维度以及 对于 K 维情况。如果
reduction不是'none'(默认'mean'),则
注意
当target包含类别索引时,此标准的性能通常更好,因为这允许进行优化的计算。仅当每个小批次项的单个类别标签过于严格时,才考虑将target提供为类别概率。
- Parameters
权重 (张量, 可选) – 手动调整每个类别的权重。 如果提供,必须是一个大小为 C 且数据类型为浮点数的张量
size_average (布尔值, 可选) – 已弃用(参见
reduction)。默认情况下, 损失在批次中的每个损失元素上进行平均。请注意,对于某些损失,每个样本有多个元素。如果字段size_average设置为False,则损失改为对每个小批次进行求和。当reduce为False时忽略。默认值:Trueignore_index (int, 可选) – 指定一个目标值,该值将被忽略,并且不会对输入梯度产生贡献。当
size_average为True时,损失将平均在非忽略的目标上。请注意,ignore_index仅在目标包含类别索引时适用。reduce (bool, 可选) – 已弃用(参见
reduction)。默认情况下,损失会根据size_average的设置在每个小批次中对观测值进行平均或求和。当reduce为False时,返回每个批次元素的损失,并忽略size_average。默认值:Truereduction (str, 可选) – 指定应用于输出的reduction方式:
'none'|'mean'|'sum'。'none':不进行reduction,'mean':取输出的加权平均值,'sum':输出将被求和。注意:size_average和reduce正在被弃用,在此期间,指定这两个参数中的任何一个都将覆盖reduction。默认值:'mean'label_smoothing (float, 可选) – 一个在 [0.0, 1.0] 范围内的浮点数。指定计算损失时的平滑量,其中 0.0 表示没有平滑。目标变为原始真实标签和均匀分布的混合,如 《重新思考计算机视觉的初始架构》 中所述。默认值:。
- Shape:
输入:形状 、 或 ,其中 在 K 维损失的情况下。
目标:如果包含类别索引,形状 , 或 其中 在 K 维损失的情况下,每个值应在 之间。 如果包含类别概率,形状与输入相同,每个值应在 之间。
输出:如果 reduction 是 ‘none’,形状 , 或 在 K 维损失的情况下,取决于输入的形状。否则,标量。
其中:
示例:
>>> # 带有类索引的目标示例 >>> loss = nn.CrossEntropyLoss() >>> input = torch.randn(3, 5, requires_grad=True) >>> target = torch.empty(3, dtype=torch.long).random_(5) >>> output = loss(input, target) >>> output.backward() >>> >>> # 带有类概率的目标示例 >>> input = torch.randn(3, 5, requires_grad=True) >>> target = torch.randn(3, 5).softmax(dim=1) >>> output = loss(input, target) >>> output.backward()