NLLLoss
-
class torch.nn.modules.loss.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.modules.loss.NLLLoss.html