Spec-Zone.ru › PyTorch 1

CrossEntropyLoss

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

Этот критерий вычисляет потерю кросс-энтропии между входными логами и целевыми значениями.

Он полезен при обучении задачи классификации с C классами. Если указан, необязательный аргумент weight должен быть 1D Tensor, присваивающим вес каждому из классов. Это особенно полезно, когда у вас есть несбалансированный обучающий набор.

Ожидается, что input будет содержать ненормализованные логарифмы для каждого класса (которые not не обязаны быть положительными или суммироваться до 1, вообще). input должен быть тензором размера (C)(C) для невходного входного сигнала, (minibatch,C)(minibatch, C) или (minibatch,C,d1,d2,...,dK)(minibatch, C, d_1, d_2, ..., d_K) с K≥1K \geq 1 для K-мерного случая. Последний полезен для входных данных более высокой размерности, например, для вычисления потерь кросс-энтропии на пиксель для 2D-изображений.

Ожидаемые target для этого критерия должны содержать:

  • Индексы классов в диапазоне [0,C)[0, C), где CC — количество классов; если ignore_index указано, эта потеря также принимает этот индекс класса (этот индекс необязательно должен быть в диапазоне классов). Несведённая (т. е. с reduction установленным на 'none') потеря в этом случае может быть описана как:

    ℓ(x,y)=L={l1,…,lN}⊤,ln=−wynlog⁡exp⁡(xn,yn)∑c=1Cexp⁡(xn,c)⋅1{yn≠ignore_index}\ell(x, y) = L = \{l_1,\dots,l_N\}^\top, \quad l_n = - w_{y_n} \log \frac{\exp(x_{n,y_n})}{\sum_{c=1}^C \exp(x_{n,c})} \cdot \mathbb{1}\{y_n \not= \text{ignore\_index}\}

    где xx — вход, yy — целевое значение, ww — вес, CC — количество классов, и NN охватывает размер мини-парт и d1,...,dkd_1, ..., d_k для K-мерного случая. Если reduction не 'none' (по умолчанию 'mean'), то

    ℓ(x,y)={∑n=1N1∑n=1Nwyn⋅1{yn≠ignore_index}ln,если reduction=‘mean’;∑n=1Nln,если reduction=‘sum’.\ell(x, y) = \begin{cases} \sum_{n=1}^N \frac{1}{\sum_{n=1}^N w_{y_n} \cdot \mathbb{1}\{y_n \not= \text{ignore\_index}\}} l_n, & \text{if reduction} = \text{`mean';}\\ \sum_{n=1}^N l_n, & \text{if reduction} = \text{`sum'.} \end{cases}

    Обратите внимание, что этот случай эквивалентен сочетанию LogSoftmax и NLLLoss.

  • Вероятности для каждого класса; полезно, когда требуется метки, выходящие за рамки одного класса на элемент минипакета, например, для смешанных меток, сглаживания меток и т. д. Несведённая (т. е. с reduction, установленным в 'none' ) функция потерь в этом случае может быть описана следующим образом:

    ℓ(x,y)=L={l1,…,lN}⊤,ln=−∑c=1Cwclog⁡exp⁡(xn,c)∑i=1Cexp⁡(xn,i)yn,c\ell(x, y) = L = \{l_1,\dots,l_N\}^\top, \quad l_n = - \sum_{c=1}^C w_c \log \frac{\exp(x_{n,c})}{\sum_{i=1}^C \exp(x_{n,i})} y_{n,c}

    где xx — вход, yy — целевое значение, ww — вес, CC — количество классов, а NN охватывает размер минипакета, а также d1,...,dkd_1, ..., d_k для случая с K измерениями. Если reduction не равно 'none' (по умолчанию 'mean' ), то

    ℓ(x,y)={∑n=1NlnN,если reduction=‘mean’;∑n=1Nln,если reduction=‘sum’.\ell(x, y) = \begin{cases} \frac{\sum_{n=1}^N l_n}{N}, & \text{if reduction} = \text{`mean';}\\ \sum_{n=1}^N l_n, & \text{if reduction} = \text{`sum'.} \end{cases}

Примечание

Производительность этого критерия, как правило, лучше, когда target содержит индексы классов, так как это позволяет оптимизировать вычисления. Укажите target в виде вероятностей классов только тогда, когда метка одного класса на элемент минипакета слишком ограничивает.

Параметры:
  • weight (Tensor, необязательно) – ручное значение масштабирования веса, присваиваемое каждому классу. При указании должно быть тензором размера C
  • size_average (bool, необязательно) – Устарело (см. reduction). По умолчанию потери усредняются по каждому элементу потерь в минипакете. Обратите внимание, что для некоторых функций потерь может быть несколько элементов на образец. Если поле size_average установлено в False , потери суммируются по каждому минипакету. Игнорируется, когда reduce равно False. По умолчанию: True
  • ignore_index (int, необязательно) – Указывает целевое значение, которое игнорируется и не вносит вклад в градиент входных данных. Когда size_average равно True , потери усредняются по неигнорируемым целевым значениям. Обратите внимание, что ignore_index применимо только тогда, когда целевое значение содержит индексы классов.
  • reduce (bool, необязательно) – Устарело (см. reduction). По умолчанию потери усредняются или суммируются по наблюдениям для каждого минипакета в зависимости от size_average . Когда reduce равно False , возвращается потеря на элемент минипакета, и size_average игнорируется. По умолчанию: True
  • reduction (str, необязательно) – Указывает операцию свёртки, применяемую к выводу: 'none' | 'mean' | 'sum' . 'none' : не применяется свёртка, 'mean' : вычисляется взвешенное среднее значение вывода, 'sum' : вычисление суммы. Примечание: size_average и reduce в процессе устаревания, а пока указание любого из этих двух аргументов переопределяет reduction . По умолчанию: 'mean'
  • label_smoothing (float, необязательно) – Число с плавающей точкой в диапазоне [0.0, 1.0]. Указывает степень сглаживания при вычислении функции потерь, где 0.0 означает отсутствие сглаживания. Метки становятся смесью исходных истинных значений и равномерного распределения, как описано в Rethinking the Inception Architecture for Computer Vision. По умолчанию: 0.00.0.
Форма:
  • Вход: Форма (C)(C), (N,C)(N, C) или (N,C,d1,d2,...,dK)(N, C, d_1, d_2, ..., d_K) с K≥1K \geq 1 в случае K-мерной функции потерь.
  • Целевое значение: если содержатся индексы классов, форма ()(), (N)(N) или (N,d1,d2,...,dK)(N, d_1, d_2, ..., d_K) с K≥1K \geq 1 в случае K-мерной функции потерь, где каждое значение должно быть в пределах [0,C)[0, C). Если содержатся вероятности классов, форма такая же, как у входа, и каждое значение должно быть в пределах [0,1][0, 1].
  • Вывод: если reduction = ‘none’, форма ()(), (N)(N) или (N,d1,d2,...,dK)(N, d_1, d_2, ..., d_K) с K≥1K \geq 1 в случае K-мерной функции потерь, в зависимости от формы входных данных. В противном случае скаляр.

где:

C=количество классовN=размер пакета\begin{aligned} C ={} & \text{number of classes} \\ N ={} & \text{batch size} \\ \end{aligned}

Примеры:

>>> # Example of target with class indices
>>> loss = nn.CrossEntropyLoss()
>>> input = torch.randn(3, 5, requires_grad=True)
>>> target = torch.empty(3, dtype=torch.long).random_(5)
>>> output = loss(input, target)
>>> output.backward()
>>>
>>> # Example of target with class probabilities
>>> input = torch.randn(3, 5, requires_grad=True)
>>> target = torch.randn(3, 5).softmax(dim=1)
>>> output = loss(input, target)
>>> output.backward()

© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/1.13/generated/torch.nn.CrossEntropyLoss.html

Spec-Zone.ru

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