我想在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层。这样,数字将代表概率。还要确保目标是二进制数字。如果您发布完整的代码,我们可能会提供更多帮助。