當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python PyTorch NLLLoss用法及代碼示例


本文簡要介紹python語言中 torch.nn.NLLLoss 的用法。

用法:

class torch.nn.NLLLoss(weight=None, size_average=None, ignore_index=- 100, reduce=None, reduction='mean')

參數

  • weight(Tensor,可選的) -給每個類一個手動重新調整的權重。如果給定,它必須是大小為 C 的張量。否則,它被視為擁有所有的。

  • size_average(bool,可選的) -已棄用(請參閱reduction)。默認情況下,損失是批次中每個損失元素的平均值。請注意,對於某些損失,每個樣本有多個元素。如果字段 size_average 設置為 False ,則會對每個小批量的損失求和。當 reduceFalse 時忽略。默認值:True

  • ignore_index(int,可選的) -指定一個被忽略且不影響輸入梯度的目標值。當 size_averageTrue 時,損失是在非忽略目標上的平均值。

  • reduce(bool,可選的) -已棄用(請參閱reduction)。默認情況下,根據 size_average 對每個小批量的觀察結果進行平均或求和。當 reduceFalse 時,返回每個批次元素的損失並忽略 size_average 。默認值:True

  • reduction(string,可選的) -指定要應用於輸出的縮減:'none' | 'mean' | 'sum''none' :不應用減少,'mean':取輸出的加權平均值,'sum':輸出將被求和。注意:size_averagereduce 正在被棄用,同時,指定這兩個參數中的任何一個都將覆蓋 reduction 。默認值:'mean'

負對數似然損失。用C 類訓練分類問題很有用。

如果提供,可選參數 weight 應該是一維張量,為每個類分配權重。當你有一個不平衡的訓練集時,這特別有用。

通過前向調用給出的input 預計將包含每個類的log-probabilities。 input 必須是大小為 的張量,對於 K 維情況, 。後者對於更高維度的輸入很有用,例如為 2D 圖像計算 NLL 損失 per-pixel。

通過在網絡的最後一層添加 LogSoftmax 層,可以輕鬆地在神經網絡中獲得 log-probabilities。如果您不想添加額外的圖層,您可以改用CrossEntropyLoss

此損失預期的 target 應該是 範圍內的類索引,其中 C = number of classes ;如果指定了ignore_index,這個損失也接受這個類索引(這個索引可能不一定在類範圍內)。

未減少的(即 reduction 設置為 'none' )損失可以說明為:

其中 是輸入, 是目標, 是權重, 是批量大小。如果 reduction 不是 'none' (默認 'mean' ),那麽

形狀:
  • 輸入: ,其中 C = number of classes K 維損失的情況下。

  • 目標: ,其中每個值為 ,或在 K-dimensional 丟失的情況下為

  • 輸出:如果 reduction'none' ,則在 K-dimensional 丟失的情況下使用 形狀 。否則,標量。

例子:

>>> m = nn.LogSoftmax(dim=1)
>>> loss = nn.NLLLoss()
>>> # input is of size N x C = 3 x 5
>>> input = torch.randn(3, 5, requires_grad=True)
>>> # each element in target has to have 0 <= value < C
>>> target = torch.tensor([1, 0, 4])
>>> output = loss(m(input), target)
>>> output.backward()
>>>
>>>
>>> # 2D loss example (used, for example, with image inputs)
>>> N, C = 5, 4
>>> loss = nn.NLLLoss()
>>> # input is of size N x C x height x width
>>> data = torch.randn(N, 16, 10, 10)
>>> conv = nn.Conv2d(16, C, (3, 3))
>>> m = nn.LogSoftmax(dim=1)
>>> # each element in target has to have 0 <= value < C
>>> target = torch.empty(N, 8, 8, dtype=torch.long).random_(0, C)
>>> output = loss(m(conv(data)), target)
>>> output.backward()

相關用法


注:本文由純淨天空篩選整理自pytorch.org大神的英文原創作品 torch.nn.NLLLoss。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。