Python 3.x 运行时错误:CUDA错误:丢失函数时触发设备端断言

Python 3.x 运行时错误:CUDA错误:丢失函数时触发设备端断言,python-3.x,deep-learning,pytorch,Python 3.x,Deep Learning,Pytorch,/pytorch/aten/src/aten/native/cuda/Loss.cu:102:operator():block:[18,0,0],thread:[54,0,0]断言input\u val>=zero&&input\u val=zero&&input\u val=zero&&input\u val=zero&&input\u val=zero&&input\u val错误可能有两个原因: 正如日志所述,input\u val不在范围[0;1]之间。因此,您应该确保模型输出在该范围内

/pytorch/aten/src/aten/native/cuda/Loss.cu:102:operator():block:[18,0,0],thread:[54,0,0]断言
input\u val>=zero&&input\u val=zero&&input\u val=zero&&input\u val=zero&&input\u val=zero&&input\u val错误可能有两个原因:

  • 正如日志所述,
    input\u val
    不在范围[0;1]之间。因此,您应该确保模型输出在该范围内。您可以使用pytorch的
    torch.clamp()
    。在计算损失之前,添加以下行:
  • 可能您确定模型输出在[0;1]范围内。然后,非常常见的问题是输出包含一些
    nan
    值,这些值也会触发断言。为了避免这种情况,在计算损失之前,您可以再次使用以下技巧:

  • 这里的技巧是使用
    nan=nan
    属性,我们应该将它们更改为某个有效数字。

    我在使用自定义损失函数时遇到了相同的问题。你找到解决办法了吗?
    criterion = nn.CrossEntropyLoss()
    loss = criterion(torch.reshape(out, [-1, dataset.out_dim]), torch.reshape(target, [-1, dataset.out_dim]))
    loss = torch.mean(loss)
    
        out = out.clamp(0, 1)
    
        out[out!=out] = 0 # or 1 depending on your model's need