SoftmaxCrossEntropyLoss¶
SoftmaxCrossEntropyLoss - 13¶
版本¶
域:
main
始于版本:
13
函数:
True
支持级别:
SupportType.COMMON
形状推断:
True
该版本的运算符自 版本 13 起可用。
摘要¶
损失函数,用于测量 ‘scores’ 和 ‘labels’ 之间的 Softmax 交叉熵。此运算符首先计算一个损失张量,其形状与 labels 输入相同。如果输入是形状为 (N, C) 的 2-D 张量,则损失张量可能是一个 N 元素的向量 L = (l_1, l_2, …, l_N)。如果输入是形状为 (N, C, D1, D2, …, Dk) 的 N-D 张量(K 维损失,K >= 1),则损失张量 L 的形状可能为 (N, D1, D2, …, Dk),其中 L[i,][j_1][j_2]…[j_k] 表示 L 中的一个标量元素。计算出 L 后,此运算符可以选择执行一个归约(reduction)操作。
scores 的形状: (N, C),其中 C 是类别数量,或 (N, C, D1, D2,…, Dk)(K 维损失,K >= 1)。
labels 的形状: (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.
当 label-value 等于 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)
如果 reduction = ‘none’,输出是形状为 (N, D1, D2, …, Dk) 的 L。
如果 reduction = ‘sum’,输出是一个标量: Sum(L)。
如果 reduction = ‘mean’,输出是一个标量: ReduceMean(L),或者如果提供了 weights:
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 个之间。
output (异构) - **T**
加权损失浮点张量。如果 reduction 为 ‘none’,其形状为 [batch_size],或在 K 维损失情况下为 [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¶
版本¶
域:
main
始于版本:
12
函数:
True
支持级别:
SupportType.COMMON
形状推断:
True
该版本的运算符自 版本 12 起可用。
摘要¶
损失函数,用于测量 ‘scores’ 和 ‘labels’ 之间的 Softmax 交叉熵。此运算符首先计算一个损失张量,其形状与 labels 输入相同。如果输入是形状为 (N, C) 的 2-D 张量,则损失张量可能是一个 N 元素的向量 L = (l_1, l_2, …, l_N)。如果输入是形状为 (N, C, D1, D2, …, Dk) 的 N-D 张量(K 维损失,K >= 1),则损失张量 L 的形状可能为 (N, D1, D2, …, Dk),其中 L[i,][j_1][j_2]…[j_k] 表示 L 中的一个标量元素。计算出 L 后,此运算符可以选择执行一个归约(reduction)操作。
scores 的形状: (N, C),其中 C 是类别数量,或 (N, C, D1, D2,…, Dk)(K 维损失,K >= 1)。labels 的形状: (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]。
当 label-value 等于 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):如果 reduction = ‘none’,输出是形状为 (N, D1, D2, …, Dk) 的 L。如果 reduction = ‘sum’,输出是一个标量: Sum(L)。如果 reduction = ‘mean’,输出是一个标量: ReduceMean(L),或者如果提供了 weights: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 个之间。
output (异构) - **T**
加权损失浮点张量。如果 reduction 为 ‘none’,其形状为 [batch_size],或在 K 维损失情况下为 [batch_size, D1, D2, …, Dk]。否则,它是一个标量。
log_prob (可选, 异构) - **T**
对数概率张量。如果 softmax 的输出是 prob,其值为 log(prob)。
类型约束¶
**T** 在 (
tensor(double)
,tensor(float)
,tensor(float16)
)约束输入和输出类型为浮点张量。
**Tind** 在 (
tensor(int32)
,tensor(int64)
)约束目标为整数类型