Spec-Zone.ru › PyTorch 2.14

NLLLoss

class torch.nn.NLLLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean') [исходный код]

Функция потерь с отрицательным логарифмом правдоподобия. Она полезна для обучения при решении задачи классификации с 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 для каждого пикселя двумерных изображений.

Получить логарифмы вероятностей в нейронной сети можно, добавив слой 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.NLLLoss.html

Spec-Zone.ru

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