你总是可以利用这个事实 nan != nan :
nan != nan
>>> x = torch.tensor([1, 2, np.nan]) tensor([ 1., 2., nan.]) >>> x != x tensor([ 0, 0, 1], dtype=torch.uint8)
使用pytorch 0.4也有 torch.isnan :
torch.isnan
>>> torch.isnan(x) tensor([ 0, 0, 1], dtype=torch.uint8)
从PyTorch 0.4.1开始就有了 detect_anomaly 上下文管理器,它自动插入相当于的断言 assert not torch.isnan(grad).any() 在向后传播的所有步骤之间。在向后传递期间出现问题时非常有用。
detect_anomaly
assert not torch.isnan(grad).any()