Spec-Zone.ru › PyTorch 2.14

NLLLoss

class torch.nn.modules.loss.NLLLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean') [источник]

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

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

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

Получить логарифмы вероятностей в нейронной сети легко: достаточно добавить слой 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, \\ l_n = - w_{y_n} x_{n,y_n}, \\ 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,if reduction=‘mean’;∑n=1Nln,if reduction=‘sum’.\ell(x, y) = \begin{cases} \sum_{n=1}^N \frac{1}{\sum_{n=1}^N w_{y_n}} l_n, & \text{if reduction} = \text{`mean';}\\ \sum_{n=1}^N l_n, & \text{if reduction} = \text{`sum'.} \end{cases}
Параметры:
  • weight (Tensor, необязательно) – вручную заданный коэффициент масштабирования веса для каждого класса. Если указан, он должен быть тензором размера C. В противном случае предполагается, что все его элементы равны единице.
  • size_average (bool, необязательно) – Устарел (см. reduction). По умолчанию усредняет потери по всем элементам потерь в пакете. Обратите внимание, что для некоторых функций потерь на один образец приходится несколько элементов. Если параметр size_average установлен в False, вместо этого потери суммируются для каждого мини-пакета. Игнорируется, если reduce равен False. По умолчанию: None
  • ignore_index (int, необязательно) – Задает целевое значение, которое игнорируется и не влияет на градиент входных данных. Если size_average равен True, потери усредняются по целевым значениям, которые не игнорируются.
  • reduce (bool, необязательно) – Устарел (см. reduction). По умолчанию потери усредняются или суммируются по наблюдениям для каждого мини-пакета в зависимости от size_average. Если reduce равен False, вместо этого возвращаются потери для каждого элемента пакета, а size_average игнорируется. По умолчанию: None
  • reduction (str, необязательно) – Задает способ редукции выходных данных: 'none' | 'mean' | 'sum'. 'none': редукция не выполняется, 'mean': вычисляется взвешенное среднее выходных данных, 'sum': выходные данные суммируются. Примечание: size_average и reduce устаревают; пока что указание любого из этих аргументов переопределит reduction. По умолчанию: 'mean'
Формы тензоров::
  • Входные данные: (N,C)(N, C) или (C)(C), где C = number of classes, N = batch size или (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. В противном случае возвращается скаляр.

Примеры

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

Выполняет прямой проход.

Тип возвращаемого значения:

Tensor

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

Spec-Zone.ru

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