負對數概似損失

負對數概似損失 - 22

版本

此版本的運算符自版本 22 開始提供。

摘要

負對數概似損失運算符計算(加權)負對數概似損失。其「輸入」張量的形狀為 (N, C, d1, d2, …, dk),其中 k >= 0。「輸入」張量包含 input[n, :, d_1, d_2,…, d_k] 屬於 [0, C) 類別的對數機率。運算符的「目標」輸入張量的形狀為 (N, d1, d2, …, dk)。它編碼類別標籤(C 個類別之一),或者它可能包含 N x d1 x d2 x … x dk 個樣本的特殊值(由屬性 ignore_index 指示)。input[n, :, d_1, d_2,…d_k] 被分類為類別 c = target[n][d_1][d_2]…[d_k] 的損失值計算如下

loss[n][d_1][d_2]...[d_k] = -input[n][c][d_1][d_2]...[d_k].

當提供可選的「權重」時,樣本損失計算如下

loss[n][d_1][d_2]...[d_k] = -input[n][c][d_1][d_2]...[d_k] * weight[c].

當目標值等於 ignore_index 時,損失為零。

loss[n][d_1][d_2]...[d_k] = 0, when target[n][d_1][d_2]...[d_k] = ignore_index

如果「reduction」屬性設定為「none」,則運算符的輸出將是上述損失,形狀為 (N, d1, d2, …, dk)。如果「reduction」屬性設定為「mean」(預設屬性值),則輸出損失為(權重)平均值

mean(loss), if "weight" is not provided,

或如果提供權重,則為

sum(loss) / sum(weight[target[n][d_1][d_2]...[d_k]]]), for all samples.

如果「reduction」屬性設定為「sum」,則輸出為純量:sum(loss)

另請參閱 https://pytorch.dev.org.tw/docs/stable/nn.html#torch.nn.NLLLoss

範例 1

// negative log likelihood loss, "none" reduction
N, C, d1 = 2, 3, 2
input = [[[1.0, 2.0], [2.0, 2.0], [3.0, 2.0]],
          [[0.0, 1.0], [2.0, 2.0], [1.0, 2]]]
target = [[2, 1], [0, 2]]

loss = np.zeros((N, d1))
for n in range(N):
    for d_1 in range(d1):
        c = target[n][d_1]
        loss[n][d_1] = -input[n][c][d_1]

// print(loss)
// [[-3. -2.]
//  [-0. -2.]]

範例 2

// weighted negative log likelihood loss, sum reduction
N, C, d1 = 2, 3, 2
input = [[[1.0, 2.0], [2.0, 2.0], [3.0, 2.0]],
        [[0.0, 1.0], [2.0, 2.0], [1.0, 2]]]
target = [[2, 1], [0, 2]]
weight = [0.2, 0.3, 0.1]
loss = np.zeros((N, d1))
for n in range(N):
    for d_1 in range(d1):
        c = target[n][d_1]
        loss[n][d_1] = -input[n][c][d_1] * weight[c]

loss = np.sum(loss)
// print(loss)
// -1.1

範例 3

// weighted negative log likelihood loss, mean reduction
N, C, d1 = 2, 3, 2
input = [[[1.0, 2.0], [2.0, 2.0], [3.0, 2.0]],
        [[0.0, 1.0], [2.0, 2.0], [1.0, 2]]]
target = [[2, 1], [0, 2]]
weight = [0.2, 0.3, 0.1]
loss = np.zeros((N, d1))
weight_total = 0
for n in range(N):
    for d_1 in range(d1):
        c = target[n][d_1]
        loss[n][d_1] = -input[n][c][d_1] * weight[c]
        weight_total = weight_total + weight[c]

loss = np.sum(loss) / weight_total
// print(loss)
// -1.57

屬性

  • ignore_index - INT :

    指定一個被忽略且不影響輸入梯度的目標值。這是一個可選的值。

  • reduction - STRING(預設為 'mean'

    要套用至損失的縮減類型:none、sum、mean(預設)。'none':輸出為每個樣本的損失。'sum':輸出將會加總。'mean':輸出總和將會除以套用權重的總和。

輸入

介於 2 和 3 個輸入之間。

  • input(異質)- T

    形狀為 (N, C) 或 (N, C, d1, d2, …, dk) 的輸入張量。

  • target(異質)- Tind

    形狀為 (N) 或 (N, d1, d2, …, dk) 的目標張量。目標元素值應在 [0, C) 的範圍內。如果指定了 ignore_index,則它可能具有 [0, C) 範圍之外的值,並且目標值應在 [0, C) 範圍內或具有 ignore_index 值。

  • weight(可選,異質)- T

    可選的重新調整權重張量。如果給定,它必須是大小為 C 的張量。否則,它將被視為所有值都為 1。

輸出

  • loss(異質)- T

    負對數概似損失

類型約束

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

    將輸入、權重和輸出類型限制為浮點張量。

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

    將目標限制為整數類型

負對數概似損失 - 13

版本

此版本的運算符自版本 13 開始提供。

摘要

負對數概似損失運算符計算(加權)負對數概似損失。其「輸入」張量的形狀為 (N, C, d1, d2, …, dk),其中 k >= 0。「輸入」張量包含 input[n, :, d_1, d_2,…, d_k] 屬於 [0, C) 類別的對數機率。運算符的「目標」輸入張量的形狀為 (N, d1, d2, …, dk)。它編碼類別標籤(C 個類別之一),或者它可能包含 N x d1 x d2 x … x dk 個樣本的特殊值(由屬性 ignore_index 指示)。input[n, :, d_1, d_2,…d_k] 被分類為類別 c = target[n][d_1][d_2]…[d_k] 的損失值計算如下

loss[n][d_1][d_2]...[d_k] = -input[n][c][d_1][d_2]...[d_k].

當提供可選的「權重」時,樣本損失計算如下

loss[n][d_1][d_2]...[d_k] = -input[n][c][d_1][d_2]...[d_k] * weight[c].

當目標值等於 ignore_index 時,損失為零。

loss[n][d_1][d_2]...[d_k] = 0, when target[n][d_1][d_2]...[d_k] = ignore_index

如果「reduction」屬性設定為「none」,則運算符的輸出將是上述損失,形狀為 (N, d1, d2, …, dk)。如果「reduction」屬性設定為「mean」(預設屬性值),則輸出損失為(權重)平均值

mean(loss), if "weight" is not provided,

或如果提供權重,則為

sum(loss) / sum(weight[target[n][d_1][d_2]...[d_k]]]), for all samples.

如果「reduction」屬性設定為「sum」,則輸出為純量:sum(loss)

另請參閱 https://pytorch.dev.org.tw/docs/stable/nn.html#torch.nn.NLLLoss

範例 1

// negative log likelihood loss, "none" reduction
N, C, d1 = 2, 3, 2
input = [[[1.0, 2.0], [2.0, 2.0], [3.0, 2.0]],
          [[0.0, 1.0], [2.0, 2.0], [1.0, 2]]]
target = [[2, 1], [0, 2]]

loss = np.zeros((N, d1))
for n in range(N):
    for d_1 in range(d1):
        c = target[n][d_1]
        loss[n][d_1] = -input[n][c][d_1]

// print(loss)
// [[-3. -2.]
//  [-0. -2.]]

範例 2

// weighted negative log likelihood loss, sum reduction
N, C, d1 = 2, 3, 2
input = [[[1.0, 2.0], [2.0, 2.0], [3.0, 2.0]],
        [[0.0, 1.0], [2.0, 2.0], [1.0, 2]]]
target = [[2, 1], [0, 2]]
weight = [0.2, 0.3, 0.1]
loss = np.zeros((N, d1))
for n in range(N):
    for d_1 in range(d1):
        c = target[n][d_1]
        loss[n][d_1] = -input[n][c][d_1] * weight[c]

loss = np.sum(loss)
// print(loss)
// -1.1

範例 3

// weighted negative log likelihood loss, mean reduction
N, C, d1 = 2, 3, 2
input = [[[1.0, 2.0], [2.0, 2.0], [3.0, 2.0]],
        [[0.0, 1.0], [2.0, 2.0], [1.0, 2]]]
target = [[2, 1], [0, 2]]
weight = [0.2, 0.3, 0.1]
loss = np.zeros((N, d1))
weight_total = 0
for n in range(N):
    for d_1 in range(d1):
        c = target[n][d_1]
        loss[n][d_1] = -input[n][c][d_1] * weight[c]
        weight_total = weight_total + weight[c]

loss = np.sum(loss) / weight_total
// print(loss)
// -1.57

屬性

  • ignore_index - INT :

    指定一個被忽略且不影響輸入梯度的目標值。這是一個可選的值。

  • reduction - STRING(預設為 'mean'

    要套用至損失的縮減類型:none、sum、mean(預設)。'none':輸出為每個樣本的損失。'sum':輸出將會加總。'mean':輸出總和將會除以套用權重的總和。

輸入

介於 2 和 3 個輸入之間。

  • input(異質)- T

    形狀為 (N, C) 或 (N, C, d1, d2, …, dk) 的輸入張量。

  • target(異質)- Tind

    形狀為 (N) 或 (N, d1, d2, …, dk) 的目標張量。目標元素值應在 [0, C) 的範圍內。如果指定了 ignore_index,則它可能具有 [0, C) 範圍之外的值,並且目標值應在 [0, C) 範圍內或具有 ignore_index 值。

  • weight(可選,異質)- T

    可選的重新調整權重張量。如果給定,它必須是大小為 C 的張量。否則,它將被視為所有值都為 1。

輸出

  • loss(異質)- T

    負對數概似損失

類型約束

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

    將輸入、權重和輸出類型限制為浮點張量。

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

    將目標限制為整數類型

負對數概似損失 - 12

版本

此版本的運算符自版本 12 開始提供。

摘要

NegativeLogLikelihoodLoss 運算子會計算(加權)負對數似然損失。它的「輸入」張量形狀為 (N, C, d1, d2, …, dk),其中 k >= 0。「輸入」張量包含 input[n, :, d_1, d_2,…, d_k] 屬於類別 [0, C) 的對數機率。運算子的「目標」輸入張量形狀為 (N, d1, d2, …, dk)。它會編碼類別標籤(C 個類別中的一個),或者對於 N x d1 x d2 x … x dk 個樣本,它可能包含一個特殊值(由屬性 ignore_index 指示)。input[n, :, d_1, d_2,…d_k] 被分類為類別 c = target[n][d_1][d_2]…[d_k] 的損失值計算如下:loss[n][d_1][d_2]…[d_k] = -input[n][c][d_1][d_2]…[d_k]。當提供可選的「權重」時,樣本損失計算如下:loss[n][d_1][d_2]…[d_k] = -input[n][c][d_1][d_2]…[d_k] * weight[c]。當目標值等於 ignore_index 時,損失為零。

loss[n][d_1][d_2]...[d_k] = 0, when target[n][d_1][d_2]...[d_k] = ignore_index

如果將「reduction」屬性設定為「none」,則運算子的輸出將是上述損失,形狀為 (N, d1, d2, …, dk)。如果將「reduction」屬性設定為「mean」(預設屬性值),則輸出損失會被(加權)平均:mean(loss),如果沒有提供「權重」,或者如果提供了權重,則為所有樣本的 sum(loss) / sum(weight[target[n][d_1][d_2]…[d_k]])。如果將「reduction」屬性設定為「sum」,則輸出為純量:sum(loss)。另請參閱 https://pytorch.dev.org.tw/docs/stable/nn.html#torch.nn.NLLLoss。範例 1: // 負對數似然損失,「none」reduction N, C, d1 = 2, 3, 2 input = [[[1.0, 2.0], [2.0, 2.0], [3.0, 2.0]], [[0.0, 1.0], [2.0, 2.0], [1.0, 2]]] target = [[2, 1], [0, 2]] loss = np.zeros((N, d1)) for n in range(N): for d_1 in range(d1): c = target[n][d_1] loss[n][d_1] = -input[n][c][d_1] // print(loss) // [[-3. -2.] // [-0. -2.]] 範例 2: // 加權負對數似然損失,sum reduction N, C, d1 = 2, 3, 2 input = [[[1.0, 2.0], [2.0, 2.0], [3.0, 2.0]], [[0.0, 1.0], [2.0, 2.0], [1.0, 2]]] target = [[2, 1], [0, 2]] weight = [0.2, 0.3, 0.1] loss = np.zeros((N, d1)) for n in range(N): for d_1 in range(d1): c = target[n][d_1] loss[n][d_1] = -input[n][c][d_1] * weight[c] loss = np.sum(loss) // print(loss) // -1.1 範例 3: // 加權負對數似然損失,mean reduction N, C, d1 = 2, 3, 2 input = [[[1.0, 2.0], [2.0, 2.0], [3.0, 2.0]], [[0.0, 1.0], [2.0, 2.0], [1.0, 2]]] target = [[2, 1], [0, 2]] weight = [0.2, 0.3, 0.1] loss = np.zeros((N, d1)) weight_total = 0 for n in range(N): for d_1 in range(d1): c = target[n][d_1] loss[n][d_1] = -input[n][c][d_1] * weight[c] weight_total = weight_total + weight[c] loss = np.sum(loss) / weight_total // print(loss) // -1.57

屬性

  • ignore_index - INT :

    指定一個被忽略且不影響輸入梯度的目標值。這是一個可選的值。

  • reduction - STRING(預設為 'mean'

    要套用至損失的縮減類型:none、sum、mean(預設)。'none':輸出為每個樣本的損失。'sum':輸出將會加總。'mean':輸出總和將會除以套用權重的總和。

輸入

介於 2 和 3 個輸入之間。

  • input(異質)- T

    形狀為 (N, C) 或 (N, C, d1, d2, …, dk) 的輸入張量。

  • target(異質)- Tind

    形狀為 (N) 或 (N, d1, d2, …, dk) 的目標張量。目標元素值應在 [0, C) 的範圍內。如果指定了 ignore_index,則它可能具有 [0, C) 範圍之外的值,並且目標值應在 [0, C) 範圍內或具有 ignore_index 值。

  • weight(可選,異質)- T

    可選的重新調整權重張量。如果給定,它必須是大小為 C 的張量。否則,它將被視為所有值都為 1。

輸出

  • loss(異質)- T

    負對數概似損失

類型約束

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

    將輸入、權重和輸出類型限制為浮點張量。

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

    將目標限制為整數類型