Spec-Zone.ru › PyTorch 2

CrossEntropyLoss

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

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

Он полезен при обучении задачи классификации с C классами. Если предоставлен, необязательный аргумент weight должен быть одномерным 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=‘среднее’;;∑n=1Nln,если reduction=‘сумма’.\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].
  • Выход: Если уменьшение равно ‘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{количество классов} \\ N ={} & \text{размер пакета} \\ \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/2.1/generated/torch.nn.CrossEntropyLoss.html

Spec-Zone.ru

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