Spec-Zone.ru › PyTorch 2

NLLLoss

class torch.nn.NLLLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean') [source]

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

Получение логарифмов вероятностей в нейронной сети легко достигается путем добавления 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, \quad l_n = - w_{y_n} x_{n,y_n}, \quad 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,если reduction=‘mean’;∑n=1Nln,если 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,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-мерной функции потерь. В противном случае – скаляр.

Примеры:

>>> 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

Spec-Zone.ru

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