BCEWithLogitsLoss
-
class torch.nn.modules.loss.BCEWithLogitsLoss(weight=None, size_average=None, reduce=None, reduction='mean', pos_weight=None)[исходный код] -
Эта функция потерь объединяет слой
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...)
В приведённом выше примере элементы тензора
pos_weightсоответствуют 64 различным классам в сценарии бинарной классификации с несколькими метками. Каждый элемент вpos_weightпредназначен для корректировки функции потерь с учётом дисбаланса между отрицательными и положительными примерами соответствующего класса. Такой подход полезен для наборов данных с различной степенью дисбаланса классов и позволяет точно учитывать распределение в каждом классе при вычислении функции потерь.- Параметры:
-
- weight (Tensor, необязательный) – вручную задаваемый вес для масштабирования функции потерь каждого элемента пакета. Размерность weight поддерживает трансляцию к общей форме относительно формы выходных данных (и целевых значений).
-
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, необязательный) – вес положительных примеров, который будет транслирован к форме целевых значений. Должен быть тензором, размер которого по измерению классов равен числу классов. Чтобы получить желаемые операции, внимательно учитывайте правила трансляции 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()
-
forward(input, target)[исходный код] -
Выполняет прямой проход.
- Тип возвращаемого значения:
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.nn.modules.loss.BCEWithLogitsLoss.html