Spec-Zone.ru › PyTorch 2

BCEWithLogitsLoss

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

Этот класс объединяет слой Sigmoid и функцию BCELoss в единый класс. Данная реализация более устойчива к ошибкам округления по сравнению с использованием обычного слоя Sigmoid и последующего BCELoss, так как объединение операций в один слой позволяет использовать трюк log-sum-exp для повышения числовой устойчивости.

Несведённая (т.е. с 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 \sigma(x_n) + (1 - y_n) \cdot \log (1 - \sigma(x_n)) \right],

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

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

Это используется для измерения ошибки реконструкции, например, в автоэнкодерах. Обратите внимание, что значения целевых переменных t[i] должны быть числами от 0 до 1.

Можно регулировать отзыв и точность, добавляя веса к положительным примерам. В случае многоклассовой классификации функция потерь описывается следующим образом:

ℓc(x,y)=Lc={l1,c,…,lN,c}⊤,ln,c=−wn,c[pcyn,c⋅log⁡σ(xn,c)+(1−yn,c)⋅log⁡(1−σ(xn,c))],\ell_c(x, y) = L_c = \{l_{1,c},\dots,l_{N,c}\}^\top, \quad l_{n,c} = - w_{n,c} \left[ p_c y_{n,c} \cdot \log \sigma(x_{n,c}) + (1 - y_{n,c}) \cdot \log (1 - \sigma(x_{n,c})) \right],

где cc — номер класса (c>1c > 1 для многозначной бинарной классификации, c=1c = 1 для однозначной бинарной классификации), nn — номер образца в пакете, а pcp_c — вес положительного ответа для класса cc.

pc>1p_c > 1 увеличивает отзыв, pc<1p_c < 1 увеличивает точность.

Например, если в наборе данных 100 положительных и 300 отрицательных примеров одного класса, то pos_weight для данного класса должно быть равно 300100=3\frac{300}{100}=3. Функция потерь будет действовать так, как будто в наборе данных содержится 3×100=3003\times 100=300 положительных примеров.

Примеры:

>>> target = torch.ones([10, 64], dtype=torch.float32)  # 64 classes, batch size = 10
>>> output = torch.full([10, 64], 1.5)  # A prediction (logit)
>>> pos_weight = torch.ones([64])  # All weights are equal to 1
>>> criterion = torch.nn.BCEWithLogitsLoss(pos_weight=pos_weight)
>>> criterion(output, target)  # -log(sigmoid(1.5))
tensor(0.20...)
Параметры
  • 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'
  • pos_weight (Тензор, необязательно) – вес положительных примеров, который транслируется с целью. Должен быть тензор с одинаковым размером вдоль размерности класса, что и число классов. Внимательно ознакомьтесь с правилами трансляции PyTorch, чтобы достичь желаемых операций. Для цели размером [B, C, H, W] (где B — размер пакета) pos_weight размером [B, C, H, W] будет применять различные pos_weights к каждому элементу пакета, или [C, H, W] — одинаковые pos_weights для всего пакета. Чтобы применить одинаковый положительный вес по всем пространственным размерностям для двумерной многоклассовой цели [C, H, W], используйте: [C, 1, 1]. По умолчанию: None
Форма:
  • Вход: (∗)(*), где ∗* означает любое количество измерений.
  • Цель: (∗)(*), такая же форма, как у входа.
  • Вывод: скаляр. Если reduction равно 'none', то (∗)(*), такая же форма, как у входа.

Примеры:

>>> loss = nn.BCEWithLogitsLoss()
>>> input = torch.randn(3, requires_grad=True)
>>> target = torch.empty(3).random_(2)
>>> 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.BCEWithLogitsLoss.html

Spec-Zone.ru

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