NLLLoss
-
class torch.nn.NLLLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')[source] -
Функция потерь отрицательного логарифма вероятности. Она полезна для обучения задач классификации с
Cклассами.Если указан необязательный аргумент
weight, он должен быть одномерным тензором, присваивающим вес каждому из классов. Это особенно полезно, когда у вас есть несбалансированный обучающий набор.Значение
input, переданное через вызов forward, должно содержать логарифмы вероятностей каждого класса.inputдолжен быть тензором размера либо или с дляK-мерного случая. Последнее полезно для ввода большей размерности, например, для вычисления потерь NLL на каждый пиксел для 2D изображений.Получение логарифмов вероятностей в нейронной сети легко достигается путем добавления
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, или со в случаеK-мерной функции потерь. - Цель: или , где каждое значение равно , или со в случае K-мерной функции потерь.
- Вывод: Если
reductionравно'none', форма или со в случае 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/2.1/generated/torch.nn.NLLLoss.html