CrossEntropyLoss

paddle.nn. CrossEntropyLoss ( weight=None, ignore_index=- 100, reduction=’mean’, soft_label=False, axis=- 1, name=None ) [源代码]

该OP计算输入input和标签label间的交叉熵损失 ,它结合了 LogSoftmax 和 NLLLoss 的OP计算,可用于训练一个 n 类分类器。

如果提供 weight 参数的话,它是一个 1-D 的tensor, 每个值对应每个类别的权重。 该损失函数的数学计算公式如下:

CrossEntropyLoss - 图1

当 weight 不为 none 时,损失函数的数学计算公式为:

CrossEntropyLoss - 图2

参数

  • weight (Tensor, 可选): - 指定每个类别的权重。其默认为 None 。如果提供该参数的话,维度必须为 C (类别数)。数据类型为float32或float64。

  • ignore_index (int64, 可选): - 指定一个忽略的标签值,此标签值不参与计算。默认值为-100。数据类型为int64。

  • reduction (str, 可选): - 指定应用于输出结果的计算方式,数据类型为string,可选值有: none, mean, sum 。默认为 mean ,计算 mini-batch loss均值。设置为 sum 时,计算 mini-batch loss的总和。设置为 none 时,则返回loss Tensor。

  • soft_label (bool, optional) – 指明label是否为软标签。默认为False,表示label为硬标签;若soft_label=True则表示软标签。

  • axis (int, optional) - 进行softmax计算的维度索引。 它应该在

    CrossEntropyLoss - 图3

    范围内,而 dim 是输入logits的维度。 默认值:-1。

  • name (str,optional) - 操作的名称(可选,默认值为None)。更多信息请参见 Name

形状

  • input (Tensor): - 输入 Tensor ,数据类型为float32或float64。其形状为

    CrossEntropyLoss - 图4

    , 其中 C 为类别数。对于多维度的情形下,它的形状为 [N,C,d1,d2,…,dk][N,C,d1,d2,…,dk] ,k >= 1。

  • label (Tensor): - 输入input对应的标签值,数据类型为int64。其形状为 [N][N] ,每个元素符合条件:0 <= label[i] <= C-1。对于多维度的情形下,它的形状为 [N,d1,d2,…,dk][N,d1,d2,…,dk] ,k >= 1。

  • output (Tensor): - 计算 CrossEntropyLoss 交叉熵后的损失值。

代码示例

  1. import paddle
  2. import numpy as np
  3. input_data = paddle.uniform([5, 100], dtype="float64")
  4. label_data = np.random.randint(0, 100, size=(5)).astype(np.int64)
  5. weight_data = np.random.random([100]).astype("float64")
  6. input = paddle.to_tensor(input_data)
  7. label = paddle.to_tensor(label_data)
  8. weight = paddle.to_tensor(weight_data)
  9. ce_loss = paddle.nn.CrossEntropyLoss(weight=weight, reduction='mean')
  10. output = ce_loss(input, label)
  11. print(output)
  12. # [4.84496039]

使用本API的教程文档