如何在Pytorch中使用Bceloss



我想在pytorch上写一个简单的自动编码器并使用bceloss,但是,我会脱颖而出,因为它希望目标在0到1之间。有人可以发布一个简单的用例布塞罗斯?

更新

BCELoss功能在数值上没有使用。请参阅此问题https://github.com/pytorch/pytorch/issues/751。但是,此问题已通过#1792解决,因此BCELoss现在在数字上稳定!


旧答案

如果您从源构建Pytorch,则可以使用数值稳定的函数BCEWithLogitsLoss(在https://github.com/pytorch/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()

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

相关内容

  • 没有找到相关文章

最新更新