SoftmaxCrossEntropyLoss

SoftmaxCrossEntropyLoss - 13

版本

此運算符版本自版本 13起可用。

摘要

衡量 ‘scores’ 和 ‘labels’ 之間 softmax 交叉熵的損失函數。此運算符首先計算一個形狀與 labels 輸入相同的損失張量。如果輸入是形狀為 (N, C) 的 2 維,則損失張量可能是 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 可用之後,此運算符可以選擇性地執行縮減運算符。

  • shape(scores): (N, C),其中 C 是類別數,或 (N, C, D1, D2,…, Dk),對於 K 維損失,其中 K >= 1。

  • shape(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.

當標籤值等於 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’,則輸出為 L,其形狀為 (N, D1, D2, …, Dk)。

  • 如果 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

    ground truth 輸出張量,形狀為 [batch_size] 或 [batch_size, D1, D2, …, Dk],其中 K 是維度數。Labels 元素的值應在 [0, C) 的範圍內。如果指定 ignore_index,它可以有一個超出 [0, C) 的值,且標籤值應在 [0, C) 的範圍內或具有 ignore_index 的值。

  • weights (選用,異質) - T

    手動調整每個類別權重的權重。如果提供,它必須是 1D 張量,將權重指派給每個類別。否則,它會被視為具有所有 1。

輸出

介於 1 和 2 個輸出之間。

  • output (異質) - T

    加權損失浮點數張量。如果縮減為 ‘none’,則其形狀為 [batch_size] 或 [batch_size, D1, D2, …, Dk] (對於 K 維損失)。否則,它是一個純量。

  • log_prob (選用,異質) - T

    對數機率張量。如果 softmax 的輸出為 prob,則其值為 log(prob)。

類型限制

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

    將輸入和輸出類型限制為浮點數張量。

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

    將目標限制為整數類型

SoftmaxCrossEntropyLoss - 12

版本

此運算符版本自版本 12起可用。

摘要

衡量 ‘scores’ 和 ‘labels’ 之間 softmax 交叉熵的損失函數。此運算符首先計算一個形狀與 labels 輸入相同的損失張量。如果輸入是形狀為 (N, C) 的 2 維,則損失張量可能是 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 可用之後,此運算符可以選擇性地執行縮減運算符。

shape(scores): (N, C),其中 C 是類別數,或 (N, C, D1, D2,…, Dk),對於 K 維損失,其中 K >= 1。shape(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 是類別的索引。或 l[i][d1][d2]…[dk] = -y[i][c][d1][d2]…[dk] * weights[c],如果提供 ‘weights’。

當標籤值等於 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

    ground truth 輸出張量,形狀為 [batch_size] 或 [batch_size, D1, D2, …, Dk],其中 K 是維度數。Labels 元素的值應在 [0, C) 的範圍內。如果指定 ignore_index,它可以有一個超出 [0, C) 的值,且標籤值應在 [0, C) 的範圍內或具有 ignore_index 的值。

  • weights (選用,異質) - T

    手動調整每個類別權重的權重。如果提供,它必須是 1D 張量,將權重指派給每個類別。否則,它會被視為具有所有 1。

輸出

介於 1 和 2 個輸出之間。

  • output (異質) - T

    加權損失浮點數張量。如果縮減為 ‘none’,則其形狀為 [batch_size] 或 [batch_size, D1, D2, …, Dk] (對於 K 維損失)。否則,它是一個純量。

  • log_prob (選用,異質) - T

    對數機率張量。如果 softmax 的輸出為 prob,則其值為 log(prob)。

類型約束

  • T 屬於 ( tensor(double), tensor(float), tensor(float16) )

    將輸入和輸出類型限制為浮點數張量。

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

    將目標限制為整數類型