用于检测 NaN 的 Pytorch 操作
Pytorch Operation to detect NaNs
是否有 Pytorch 内部程序来检测张量中的 NaN
s? Tensorflow 有 tf.is_nan
和 tf.check_numerics
操作……Pytorch 在某处有类似的东西吗?我在文档中找不到这样的东西...
我正在专门寻找 Pytorch 内部例程,因为我希望这在 GPU 和 CPU 上发生。这不包括基于 numpy 的解决方案(如 np.isnan(sometensor.numpy()).any()
)...
您始终可以利用 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(x)
tensor([ 0, 0, 1], dtype=torch.uint8)
从 PyTorch 0.4.1 开始,有 detect_anomaly
上下文管理器,它会在反向传播的所有步骤之间自动插入相当于 assert not torch.isnan(grad).any()
的断言。当反向传递过程中出现问题时,它非常有用。
正如@cleros 在对@nemo 的回答的评论中所建议的,您可以使用 any()
运算符将其作为布尔值获取:
torch.isnan(your_tensor).any()
如果任何值为 nan,则为真:
torch.any(tensor.isnan())
如果全部为 nan,则为真:
torch.all(tensor.isnan())
如果你想直接在张量上调用它:
import torch
x = torch.randn(5, 4)
print(x.isnan().any())
输出:
import torch
x = torch.randn(5, 4)
print(x.isnan().any())
tensor(False)
是否有 Pytorch 内部程序来检测张量中的 NaN
s? Tensorflow 有 tf.is_nan
和 tf.check_numerics
操作……Pytorch 在某处有类似的东西吗?我在文档中找不到这样的东西...
我正在专门寻找 Pytorch 内部例程,因为我希望这在 GPU 和 CPU 上发生。这不包括基于 numpy 的解决方案(如 np.isnan(sometensor.numpy()).any()
)...
您始终可以利用 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(x)
tensor([ 0, 0, 1], dtype=torch.uint8)
从 PyTorch 0.4.1 开始,有 detect_anomaly
上下文管理器,它会在反向传播的所有步骤之间自动插入相当于 assert not torch.isnan(grad).any()
的断言。当反向传递过程中出现问题时,它非常有用。
正如@cleros 在对@nemo 的回答的评论中所建议的,您可以使用 any()
运算符将其作为布尔值获取:
torch.isnan(your_tensor).any()
如果任何值为 nan,则为真:
torch.any(tensor.isnan())
如果全部为 nan,则为真:
torch.all(tensor.isnan())
如果你想直接在张量上调用它:
import torch
x = torch.randn(5, 4)
print(x.isnan().any())
输出:
import torch
x = torch.randn(5, 4)
print(x.isnan().any())
tensor(False)