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') функция потерь описывается следующим образом:где — размер пакета. Если
reductionне'none'(по умолчанию'mean'), тоЭто используется для измерения ошибки реконструкции, например, в автоэнкодере. Обратите внимание, что целевые значения
t[i]должны быть числами от 0 до 1.Можно изменять баланс между полнотой и точностью, добавив веса для положительных примеров. В случае многоклассовой классификации функция потерь описывается так:
где — номер класса ( для многоклассовой бинарной классификации, для одноклассовой бинарной классификации), — номер выборки в пакете, и — вес положительного ответа для класса .
увеличивает полноту, увеличивает точность.
Например, если в наборе данных 100 положительных и 300 отрицательных примеров одного класса, то
pos_weightдля этого класса должно быть равно . Функция потерь будет вести себя так, как будто в наборе данных 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 (Tensor, необязательно) – ручное значение масштабирования, применяемое к потере каждого элемента пакета. Если задано, должно быть тензором размера
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 (Tensor, необязательно) – вес положительных примеров. Должен быть вектором длиной, равной количеству классов.
-
weight (Tensor, необязательно) – ручное значение масштабирования, применяемое к потере каждого элемента пакета. Если задано, должно быть тензором размера
- Форма:
-
- Вход: , где означает любое количество измерений.
- Цель: , такая же форма, как у входа.
- Вывод: скаляр. Если
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/1.13/generated/torch.nn.BCEWithLogitsLoss.html