Spec-Zone.ru › PyTorch 2

BCELoss

class torch.nn.BCELoss(weight=None, size_average=None, reduce=None, reduction='mean') [source]

Создаёт критерий, который измеряет бинарную кросс-энтропию между целевыми и входными вероятностями:

Несведённая (т.е. с reduction установленным в 'none') функция потерь может быть описана как:

ℓ(x,y)=L={l1,…,lN}⊤,ln=−wn[yn⋅log⁡xn+(1−yn)⋅log⁡(1−xn)],\ell(x, y) = L = \{l_1,\dots,l_N\}^\top, \quad l_n = - w_n \left[ y_n \cdot \log x_n + (1 - y_n) \cdot \log (1 - x_n) \right],

где NN — размер пакета. Если reduction не 'none' (по умолчанию 'mean'), то

ℓ(x,y)={mean⁡(L),если reduction=‘mean’;sum⁡(L),если reduction=‘sum’.\ell(x, y) = \begin{cases} \operatorname{mean}(L), & \text{if reduction} = \text{`mean';}\\ \operatorname{sum}(L), & \text{if reduction} = \text{`sum'.} \end{cases}

Это используется для измерения ошибки реконструции, например, в автокодировщике. Обратите внимание, что целевые значения yy должны быть числами от 0 до 1.

Обратите внимание, что если xnx_n равно либо 0, либо 1, один из логарифмических членов в приведенном выше уравнении потерь будет математически неопределён. PyTorch выбирает установку log⁡(0)=−∞\log (0) = -\infty, так как lim⁡x→0log⁡(x)=−∞\lim_{x\to 0} \log (x) = -\infty.

Однако бесконечное значение потерь нежелательно по нескольким причинам.

Во-первых, если yn=0y_n = 0 или (1−yn)=0(1 - y_n) = 0, то мы умножим 0 на бесконечность. Во-вторых, если у нас есть бесконечное значение потерь, то у нас также будет бесконечный член в градиенте, так как lim⁡x→0ddxlog⁡(x)=∞\lim_{x\to 0} \frac{d}{dx} \log (x) = \infty. Это сделало бы обратную функцию BCELoss нелинейной по отношению к xnx_n, и её использование для линейной регрессии было бы затруднено.

Наш подход заключается в том, чтобы BCELoss обрезал выходные значения своей логарифмической функции так, чтобы они были не меньше -100. Таким образом, мы всегда можем иметь конечное значение потерь и линейную обратную функцию.

Параметры
  • weight (Тензор, необязательно) – ручной коэффициент масштабирования, применяемый к потерям каждого элемента пакета. При указании должен быть тензором размером nbatch.
  • size_average (bool, необязательно) – Устаревший параметр (см. reduction). По умолчанию потери усредняются по каждому элементу потерь в пакете. Обратите внимание, что для некоторых функций потерь есть несколько элементов на образец. Если поле size_average установлено в False, то потери суммируются для каждого мини-пакета. Игнорируется, когда reduce равен False. По умолчанию: True
  • reduce (bool, необязательно) – Устаревший параметр (см. reduction). По умолчанию потери усредняются или суммируются по наблюдениям для каждого мини-пакета в зависимости от size_average. Когда reduce равен False, возвращает потери на элемент пакета вместо этого и игнорирует size_average. По умолчанию: True
  • reduction (str, необязательно) – Указывает операцию сведения, применяемую к выводу: 'none' | 'mean' | 'sum'. 'none': не будет применено сведения, 'mean': сумма вывода будет разделена на количество элементов в выводе, 'sum': вывод будет просуммирован. Примечание: size_average и reduce в процессе устаревания, и пока что указание любого из них переопределит reduction. По умолчанию: 'mean'
Форма:
  • Вход: (∗)(*), где ∗* означает любое количество измерений.
  • Цель: (∗)(*), та же форма, что и вход.
  • Вывод: скаляр. Если reduction равно 'none', то (∗)(*), та же форма, что и вход.

Примеры:

>>> m = nn.Sigmoid()
>>> loss = nn.BCELoss()
>>> input = torch.randn(3, 2, requires_grad=True)
>>> target = torch.rand(3, 2, requires_grad=False)
>>> output = loss(m(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.BCELoss.html

Spec-Zone.ru

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