BCELoss¶
- class torch.nn.BCELoss(weight=None, size_average=None, reduce=None, reduction='mean')[原始碼][原始碼]¶
建立一個標準,用於測量目標值和輸入機率之間的二元交叉熵 (Binary Cross Entropy)。
未縮減的損失(即將
reduction
設定為'none'
)可以描述為:其中 是批次大小。如果
reduction
不是'none'
(預設為'mean'
),那麼這用於測量例如在自動編碼器中重建的誤差。請注意,目標 應該是介於 0 和 1 之間的數字。
請注意,如果 是 0 或 1,則上述損失方程式中的其中一個對數項在數學上是未定義的。PyTorch 選擇設定 ,因為 。但是,由於某些原因,損失方程式中的無限項是不理想的。
首先,如果 或 ,那麼我們會將 0 與無窮大相乘。 其次,如果我們有一個無限大的損失值,那麼我們的梯度也會有一個無限大的項,因為 。 這會使 BCELoss 的 backward 方法相對於 變成非線性,並且將其用於線性迴歸之類的事情將不是那麼直接。
我們的解決方案是 BCELoss 將其 log 函數輸出限制為大於或等於 -100。 這樣,我們始終可以擁有一個有限的損失值和一個線性的 backward 方法。
- 參數
weight (Tensor, optional) – 手動調整每個批次元素損失的權重。 如果給定,則必須是大小為 nbatch 的 Tensor。
size_average (bool, optional) – 已棄用 (請參閱
reduction
)。 預設情況下,損失會在批次中的每個損失元素上平均。 請注意,對於某些損失,每個樣本有多個元素。 如果欄位size_average
設為False
,則會對每個小批次進行損失的總和。 當reduce
為False
時,則會忽略此設定。 預設值:True
reduce (bool, optional) – 已棄用 (請參閱
reduction
)。 預設情況下,根據size_average
,損失會在每個小批次的觀察值上平均或求和。 當reduce
為False
時,則會改為傳回每個批次元素的損失,並忽略size_average
。 預設值:True
reduction (縮減) ( str, optional (可選)) – 指定應用於輸出的縮減方式:
'none' (無)
|'mean' (平均)
|'sum' (總和)
。'none'
:不進行縮減;'mean'
:輸出的總和將除以輸出中的元素數量;'sum'
:輸出將被加總。 注意:size_average
和reduce
正在逐步淘汰,同時,指定這兩個參數中的任何一個將覆蓋reduction
。 預設值:'mean'
- 形狀 (Shape)
輸入 (Input): , 其中 代表任意數量的維度。
目標 (Target): , 與輸入形狀相同。
輸出 (Output): 純量 (scalar)。如果
reduction
為'none'
, 則為 , 與輸入形狀相同。
範例 (Examples)
>>> 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()