Spec-Zone.ru › PyTorch 1

NLLLoss

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

Функция потерь отрицательного логарифмического правдоподобия. Она полезна для обучения задач классификации с C классами.

Если задан, необязательный аргумент weight должен быть одномерным тензором, присваивающим вес каждому из классов. Это особенно полезно, когда у вас есть несбалансированный обучающий набор.

Значение input, полученное через вызов forward, должно содержать логарифмы вероятностей каждого класса. input должен быть тензором размера либо (minibatch,C)(minibatch, C) или (minibatch,C,d1,d2,...,dK)(minibatch, C, d_1, d_2, ..., d_K) с K≥1K \geq 1 для многомерного случая K. Последний вариант полезен для ввода большей размерности, например, для вычисления потери NLL на каждый пиксель для 2D изображений.

Получение логарифмов вероятностей в нейронной сети легко достигается добавлением слоя LogSoftmax в последний слой вашей сети. Вы можете использовать CrossEntropyLoss вместо этого, если не хотите добавлять дополнительный слой.

Значение target которое ожидает эта функция потерь, должно быть индексом класса в диапазоне [0,C−1][0, C-1] где C = number of classes; если ignore_index указан, эта функция потерь также принимает этот индекс класса (этот индекс может не обязательно находиться в диапазоне классов).

Несведённая (т.е. с reduction установленным в 'none') функция потерь может быть описана как:

ℓ(x,y)=L={l1,…,lN}⊤,ln=−wynxn,yn,wc=weight[c]⋅1{c≠ignore_index},\ell(x, y) = L = \{l_1,\dots,l_N\}^\top, \quad l_n = - w_{y_n} x_{n,y_n}, \quad w_{c} = \text{weight}[c] \cdot \mathbb{1}\{c \not= \text{ignore\_index}\},

где xx — вход, yy — цель, ww — вес, а NN — размер пакета. Если reduction не 'none' (по умолчанию 'mean'), то

ℓ(x,y)={∑n=1N1∑n=1Nwynln,если reduction=‘mean’;∑n=1Nln,если reduction=‘sum’.\ell(x, y) = \begin{cases} \sum_{n=1}^N \frac{1}{\sum_{n=1}^N w_{y_n}} l_n, & \text{если reduction} = \text{`mean';}\\ \sum_{n=1}^N l_n, & \text{если reduction} = \text{`sum'.} \end{cases}
Parameters:
  • weight (Tensor, optional) – ручной масштабирующий вес, присваиваемый каждому классу. Если задан, он должен быть тензором размера C. В противном случае он обрабатывается так, как будто имеет все единицы.
  • size_average (bool, optional) – устарело (см. reduction). По умолчанию потери усредняются по каждому элементу потерь в пачке. Обратите внимание, что для некоторых потерь есть несколько элементов на образец. Если поле size_average установлено в False, потери вместо этого суммируются для каждой мини-пачки. Игнорируется, когда reduce равно False. По умолчанию: None
  • ignore_index (int, optional) – указывает целевое значение, которое игнорируется и не вносит вклад в градиент входных данных. Когда size_average равно True, потери усредняются по неигнорируемым целям.
  • reduce (bool, optional) – устарело (см. reduction). По умолчанию потери усредняются или суммируются по наблюдениям для каждой мини-пачки в зависимости от size_average. Когда reduce равно False, возвращает потери на элемент каждой пачки и игнорирует size_average. По умолчанию: None
  • reduction (str, optional) – указывает снижение, которое нужно применить к выводу: 'none' | 'mean' | 'sum'. 'none': не применяется снижение, 'mean': берется взвешенное среднее значение выхода, 'sum': вывод будет суммирован. Примечание: size_average и reduce находятся в процессе устаревания, и пока что указание одного из этих двух аргументов переопределит reduction. По умолчанию: 'mean'
END_OF_DOCUMENT_MARKER
Форма:
  • Вход: (N,C)(N, C) или (C)(C), где C = number of classes, или (N,C,d1,d2,...,dK)(N, C, d_1, d_2, ..., d_K) с K≥1K \geq 1 в случае K-мерной потери.
  • Цель: (N)(N) или ()(), где каждое значение равно 0≤targets[i]≤C−10 \leq \text{targets}[i] \leq C-1, или (N,d1,d2,...,dK)(N, d_1, d_2, ..., d_K) с K≥1K \geq 1 в случае K-мерной потери.
  • Выход: Если reduction равно 'none', форма (N)(N) или (N,d1,d2,...,dK)(N, d_1, d_2, ..., d_K) с K≥1K \geq 1 в случае K-мерной потери. В противном случае - скаляр.

Примеры:

>>> 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()

© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/1.13/generated/torch.nn.NLLLoss.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API