負對數概似損失¶
負對數概似損失 - 22¶
版本¶
域:
main
since_version:
22
函式:
True
支援層級:
SupportType.COMMON
形狀推斷:
True
此版本的運算符自版本 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¶
版本¶
域:
main
since_version:
13
函式:
True
支援層級:
SupportType.COMMON
形狀推斷:
True
此版本的運算符自版本 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¶
版本¶
域:
main
since_version:
12
函式:
True
支援層級:
SupportType.COMMON
形狀推斷:
True
此版本的運算符自版本 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)
)將目標限制為整數類型