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для данного класса должно быть равно . Функция потерь будет действовать так, как будто в наборе данных содержится положительных примеров.Примеры:
>>> 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
-
weight (Тензор, необязательно) – ручное значение масштабирования, присваиваемое потере каждого элемента пакета. Если задано, должно быть тензором размера
- Форма:
-
- Вход: , где означает любое количество измерений.
- Цель: , такая же форма, как у входа.
- Вывод: скаляр. Если
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