NLLLoss
-
class torch.nn.NLLLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')[исходный код] -
Функция потерь с отрицательным логарифмом правдоподобия. Она полезна для обучения при решении задачи классификации с
Cклассами.Если указан необязательный аргумент
weight, он должен быть одномерным тензором, задающим вес для каждого класса. Это особенно полезно, если обучающая выборка несбалансирована.Ожидается, что
input, переданный при вызове forward, будет содержать логарифмы вероятностей для каждого класса.inputдолжен быть тензором размера или с для случаяK-мерных данных. Последний вариант полезен для входных данных более высокой размерности, например для вычисления потерь NLL для каждого пикселя двумерных изображений.Получить логарифмы вероятностей в нейронной сети можно, добавив слой
LogSoftmaxв качестве последнего слоя сети. Если вы не хотите добавлять дополнительный слой, можно использоватьCrossEntropyLoss.Ожидается, что
target, используемый этой функцией потерь, будет индексом класса в диапазоне , гдеC = number of classes; если заданignore_index, эта функция потерь также принимает этот индекс класса (он необязательно должен входить в диапазон классов).Функцию потерь без редукции (то есть при
reduction, равном'none') можно описать следующим образом:где — входные данные, — целевые значения, — вес, а — размер пакета. Если
reductionне равен'none'(по умолчанию'mean'), то- Параметры:
-
-
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'
-
weight (Tensor, необязательно) – заданный вручную коэффициент масштабирования для каждого класса. Если указан, должен быть тензором размера
- Форма::
-
- Входные данные: или , где
C = number of classes,N = batch sizeили с для функции потерь размерностиK. - Целевые значения: или , где каждое значение равно или с для функции потерь размерности K.
- Выходные данные: если
reductionравно'none', форма или с для функции потерь размерности 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)[исходный код] -
Выполняет прямой проход.
- Тип возвращаемого значения:
© 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