当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PyTorch CrossEntropyLoss用法及代码示例


本文简要介绍python语言中 torch.nn.CrossEntropyLoss 的用法。

用法:

class torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=- 100, reduce=None, reduction='mean', label_smoothing=0.0)

参数

  • weight(Tensor,可选的) -给每个类一个手动重新调整的权重。如果给定,则必须是大小为 C 的张量

  • size_average(bool,可选的) -已弃用(请参阅reduction)。默认情况下,损失是批次中每个损失元素的平均值。请注意,对于某些损失,每个样本有多个元素。如果字段 size_average 设置为 False ,则会对每个小批量的损失求和。当 reduceFalse 时忽略。默认值:True

  • ignore_index(int,可选的) -指定一个被忽略且不影响输入梯度的目标值。当 size_averageTrue 时,损失是在非忽略目标上的平均值。请注意,ignore_index 仅在目标包含类索引时适用。

  • reduce(bool,可选的) -已弃用(请参阅reduction)。默认情况下,根据 size_average 对每个小批量的观察结果进行平均或求和。当 reduceFalse 时,返回每个批次元素的损失并忽略 size_average 。默认值:True

  • reduction(string,可选的) -指定要应用于输出的缩减:'none' | 'mean' | 'sum''none' :不应用减少,'mean':取输出的加权平均值,'sum':输出将被求和。注意:size_averagereduce 正在被弃用,同时,指定这两个参数中的任何一个都将覆盖 reduction 。默认值:'mean'

  • label_smoothing(float,可选的) -[0.0, 1.0] 中的浮点数。指定计算损失时的平滑量,其中 0.0 表示不平滑。目标成为原始基本事实和均匀分布的混合体,如 Rethinking the Inception Architecture for Computer Vision 中所述。默认值:

该标准计算输入和目标之间的交叉熵损失。

在使用C 类训练分类问题时很有用。如果提供,可选参数weight 应该是一维Tensor,为每个类分配权重。当你有一个不平衡的训练集时,这特别有用。

input 预计将包含每个类的原始未标准化分数。 input 必须是大小为 的张量,对于 K 维情况, 。后者对于更高维度的输入很有用,例如计算 2D 图像的交叉熵损失 per-pixel。

此标准预期的 target 应包含:

  • 范围内的类索引,其中 是类数;如果指定了ignore_index,这个损失也接受这个类索引(这个索引可能不一定在类范围内)。这种情况下未减少的(即 reduction 设置为 'none' )损失可以说明为:

    其中 是输入, 是目标, 是权重, 是类数, 跨越小批量维度以及K 维案例。如果 reduction 不是 'none' (默认 'mean' ),那么

    请注意,这种情况等效于 LogSoftmax NLLLoss 的组合。

  • 每个类别的概率;当每个小批量项目需要超过单个类的标签时很有用,例如混合标签、标签平滑等。这种情况下未减少的(即 reduction 设置为 'none' )损失可以说明为:

    其中 是输入, 是目标, 是权重, 是类数, 跨越小批量维度以及K 维案例。如果 reduction 不是 'none' (默认 'mean' ),那么

注意

target 包含类索引时,此标准的性能通常更好,因为这允许优化计算。仅当每个小批量项目的单个类标签过于严格时,才考虑提供 target 作为类概率。

形状:
  • 输入: 其中 C = number of classes K 维损失的情况下。

  • 目标:如果包含类索引,则形状为 ,其中每个值为 ,或者在 K-dimensional 丢失的情况下为 。如果包含类概率,则与输入的形状相同。

  • 输出:如果 reduction'none' ,则在 K-dimensional 丢失的情况下使用 形状 。否则,标量。

例子:

>>> # Example of target with class indices
>>> 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()
>>>
>>> # Example of target with class probabilities
>>> input = torch.randn(3, 5, requires_grad=True)
>>> target = torch.randn(3, 5).softmax(dim=1)
>>> output = loss(input, target)
>>> output.backward()

相关用法


注:本文由纯净天空筛选整理自pytorch.org大神的英文原创作品 torch.nn.CrossEntropyLoss。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。