Pytorch - 如何使用BCE损失

Qub*_*bix 9 loss autoencoder torch pytorch

我想在pytorch中编写一个简单的autoencoder并使用BCELoss,但是我得到了NaN,因为它期望目标在0和1之间.有人可以发布一个简单的BCELoss用例吗?

小智 17

BCELoss功能在数值上不稳定.请参阅此问题:https: //github.com/pytorch/pytorch/issues/751.

编辑:此问题已通过Pull#1792解决,因此BCELoss现在数值稳定.

如果你从源代码构建pytorch,你可以使用数值稳定的函数BCELoss(在https://github.com/pytorch/pytorch/pull/1792中提供),它将logits作为输入.

否则,您可以使用以下函数(在上面的问题中由yzgao提供):

class StableBCELoss(nn.modules.Module):
       def __init__(self):
             super(StableBCELoss, self).__init__()
       def forward(self, input, target):
             neg_abs = - input.abs()
             loss = input.clamp(min=0) - input * target + (1 + neg_abs.exp()).log()
             return loss.mean()
Run Code Online (Sandbox Code Playgroud)


Rog*_*llo 5

您可能想在网络末端使用 sigmoid 层。这样,数字就代表了概率。还要确保目标是二进制数。如果您发布完整的代码,我们可能会提供更多帮助。