SoftmaxCrossEntropyLoss

SoftmaxCrossEntropyLoss - 13

版本

此版本的运算符自 版本 13 起可用。

摘要

衡量“得分”和“标签”之间 softmax 交叉熵的损失函数。此运算符首先计算一个损失张量,其形状与标签输入相同。如果输入是形状为 (N, C) 的二维张量,则损失张量可能是一个 N 元素向量 L = (l_1, l_2, …, l_N)。如果输入是形状为 (N, C, D1, D2, …, Dk) 的 N 维张量,则损失张量 L 的形状可能为 (N, D1, D2, …, Dk),并且 L[i,][j_1][j_2]…[j_k] 表示 L 中的标量元素。L 可用后,此运算符可以选择执行归约运算符。

  • 形状(得分):(N, C),其中 C 是类别数,或 (N, C, D1, D2,…, Dk),在 K 维损失的情况下 K >= 1。

  • 形状(标签):(N),其中每个值都是 0 <= labels[i] <= C-1,或 (N, D1, D2,…, Dk),在 K 维损失的情况下 K >= 1。

一个样本的损失 l_i 可以按如下方式计算

l[i][d1][d2]...[dk] = -y[i][c][d1][d2]..[dk], where i is the index of classes.

l[i][d1][d2]...[dk] = -y[i][c][d1][d2]..[dk] * weights[c], if 'weights' is provided.

当标签值等于 ignore_index 时,损失为零。

l[i][d1][d2]...[dk]  = 0, when labels[n][d1][d2]...[dk] = ignore_index

其中

p = Softmax(scores)
y = Log(p)
c = labels[i][d1][d2]...[dk]

最后,L 可选择性地进行归约

  • 如果 reduction = 'none',则输出是形状为 (N, D1, D2, …, Dk) 的 L。

  • 如果 reduction = 'sum',则输出是标量:Sum(L)。

  • 如果 reduction = 'mean',则输出是标量:ReduceMean(L),或者如果提供了权重:ReduceSum(L) / ReduceSum(W),其中张量 W 的形状为 (N, D1, D2, ..., Dk),并且 W[n][d1][d2]...[dk] = weights[labels[i][d1][d2]...[dk]]

属性

  • ignore_index - INT :

    指定一个被忽略且不贡献于输入梯度的目标值。它是一个可选值。

  • reduction - STRING (默认为 'mean')

    应用于损失的归约类型:none、sum、mean(默认)。'none':不应用归约;'sum':输出将被求和;'mean':输出的总和将除以输出中的元素数量。

输入

2 到 3 个输入之间。

  • scores (异构) - T

    预测输出,形状为 [batch_size, class_size],或 [batch_size, class_size, D1, D2, …, Dk],其中 K 是维度数。

  • labels (异构) - Tind

    真实输出张量,形状为 [batch_size],或 [batch_size, D1, D2, …, Dk],其中 K 是维度数。标签元素值应在 [0, C) 范围内。如果指定了 ignore_index,它可能具有超出 [0, C) 的值,并且标签值应在 [0, C) 范围内或具有 ignore_index 值。

  • weights (可选,异构) - T

    为每个类别提供的手动重新缩放权重。如果提供,它必须是一个 1D 张量,为每个类别分配权重。否则,它被视为所有权重都为一。

输出

介于 1 到 2 个输出之间。

  • 输出 (异构) - T

    加权损失浮点张量。如果 reduction 为 'none',则在 K 维损失的情况下,其形状为 [batch_size],或 [batch_size, D1, D2, …, Dk]。否则,它是一个标量。

  • log_prob (可选,异构) - T

    对数概率张量。如果 softmax 的输出是 prob,则其值为 log(prob)。

类型约束

  • T 在 ( tensor(bfloat16), tensor(double), tensor(float), tensor(float16) )

    将输入和输出类型限制为浮点张量。

  • Tind 在 ( tensor(int32), tensor(int64) )

    将目标约束为整数类型

SoftmaxCrossEntropyLoss - 12

版本

此版本的运算符自 版本 12 起可用。

摘要

衡量“得分”和“标签”之间 softmax 交叉熵的损失函数。此运算符首先计算一个损失张量,其形状与标签输入相同。如果输入是形状为 (N, C) 的二维张量,则损失张量可能是一个 N 元素向量 L = (l_1, l_2, …, l_N)。如果输入是形状为 (N, C, D1, D2, …, Dk) 的 N 维张量,则损失张量 L 的形状可能为 (N, D1, D2, …, Dk),并且 L[i,][j_1][j_2]…[j_k] 表示 L 中的标量元素。L 可用后,此运算符可以选择执行归约运算符。

形状(得分):(N, C),其中 C 是类别数,或 (N, C, D1, D2,…, Dk),在 K 维损失的情况下 K >= 1。形状(标签):(N),其中每个值都是 0 <= labels[i] <= C-1,或 (N, D1, D2,…, Dk),在 K 维损失的情况下 K >= 1。

一个样本的损失 l_i 可以按如下方式计算:l[i][d1][d2]…[dk] = -y[i][c][d1][d2]…[dk],其中 i 是类别的索引。如果提供了“weights”,则 l[i][d1][d2]…[dk] = -y[i][c][d1][d2]…[dk] * weights[c]。

当标签值等于 ignore_index 时,损失为零。当 labels[n][d1][d2]…[dk] = ignore_index 时,l[i][d1][d2]…[dk] = 0

其中:p = Softmax(scores) y = Log(p) c = labels[i][d1][d2]…[dk]

最后,L 可选择性地进行归约:如果 reduction = 'none',则输出是形状为 (N, D1, D2, …, Dk) 的 L。如果 reduction = 'sum',则输出是标量:Sum(L)。如果 reduction = 'mean',则输出是标量:ReduceMean(L),或者如果提供了权重:ReduceSum(L) / ReduceSum(W),其中张量 W 的形状为 (N, D1, D2, …, Dk),并且 W[n][d1][d2]…[dk] = weights[labels[i][d1][d2]…[dk]]。

属性

  • ignore_index - INT :

    指定一个被忽略且不贡献于输入梯度的目标值。它是一个可选值。

  • reduction - STRING (默认为 'mean')

    应用于损失的归约类型:none、sum、mean(默认)。'none':不应用归约;'sum':输出将被求和;'mean':输出的总和将除以输出中的元素数量。

输入

2 到 3 个输入之间。

  • scores (异构) - T

    预测输出,形状为 [batch_size, class_size],或 [batch_size, class_size, D1, D2, …, Dk],其中 K 是维度数。

  • labels (异构) - Tind

    真实输出张量,形状为 [batch_size],或 [batch_size, D1, D2, …, Dk],其中 K 是维度数。标签元素值应在 [0, C) 范围内。如果指定了 ignore_index,它可能具有超出 [0, C) 的值,并且标签值应在 [0, C) 范围内或具有 ignore_index 值。

  • weights (可选,异构) - T

    为每个类别提供的手动重新缩放权重。如果提供,它必须是一个 1D 张量,为每个类别分配权重。否则,它被视为所有权重都为一。

输出

介于 1 到 2 个输出之间。

  • 输出 (异构) - T

    加权损失浮点张量。如果 reduction 为 'none',则在 K 维损失的情况下,其形状为 [batch_size],或 [batch_size, D1, D2, …, Dk]。否则,它是一个标量。

  • log_prob (可选,异构) - T

    对数概率张量。如果 softmax 的输出是 prob,则其值为 log(prob)。

类型约束

  • T 在 ( tensor(double), tensor(float), tensor(float16) )

    将输入和输出类型限制为浮点张量。

  • Tind 在 ( tensor(int32), tensor(int64) )

    将目标约束为整数类型