Python 3.x 有没有办法在pytorch中编写自定义BCE损失?

Python 3.x 有没有办法在pytorch中编写自定义BCE损失?,python-3.x,machine-learning,neural-network,computer-vision,pytorch,Python 3.x,Machine Learning,Neural Network,Computer Vision,Pytorch,我正在用pytorch编写一个自定义BCE,但在某些情况下它返回-inf和nan。这是由于日志功能 bce_loss=y_true*torch.log2(y_pred) +(one_torch-y_true)*torch.log2(one_torch-y_pred) 有没有办法重写这个?注:y_pred是一个介于0和1之间的sigmoid输出。您可以夹紧pred以停止记录错误 y\u pred=torch.clamp(y\u pred,1e-7,1-1e-7)第二项应为+(one_torch-

我正在用pytorch编写一个自定义BCE,但在某些情况下它返回-inf和nan。这是由于日志功能

bce_loss=y_true*torch.log2(y_pred) +(one_torch-y_true)*torch.log2(one_torch-y_pred)

有没有办法重写这个?注:y_pred是一个介于0和1之间的sigmoid输出。

您可以夹紧pred以停止记录错误


y\u pred=torch.clamp(y\u pred,1e-7,1-1e-7)

第二项应为
+(one_torch-y_true)*torch.log2(one_torch-y_pred)
这不会解决问题。这里的问题是,日志0是-inf,因此在y_pred=0或y_pred=1的情况下,会生成-inf,其中inturn给出的最终答案是-inf或nan。我不知道如何计算y_pred,但在大多数算法中,它不是精确的1或0,而是一个非常接近的数字,在这种情况下,你不会得到nan。你是如何得到y_pred的?是的,同样的事情我认为我只能得到非常接近0和1的值。但是,我得到的情况是,它正好是1和0。你可以在0值上加一个非常小的量,然后从1值中取一个小的量。或者你可以跳过所有这些值。如果不知道您使用的是什么型号,就无法再提供帮助。