Lua torch7:筛选出NaN值
给定任何通用的Lua torch7:筛选出NaN值,lua,nan,torch,Lua,Nan,Torch,给定任何通用的float torch.Tensor,可能包含一些NaN值,我正在寻找一种有效的方法,用零替换其中的所有NaN值,或者将它们全部删除,并过滤掉另一个新的Tensor中的“有用”值 我知道这样做的一个简单方法是手动迭代给定张量中的所有值(并相应地将它们替换为零或拒绝新张量中的值) 是否有一些预定义的Torch功能或功能组合可以在性能方面更有效地实现这一点,这取决于Torch固有的CPU-GPU优化?好吧,看来在Torch检查NAN张量中没有任何功能。但是自从楠NaN,有一个解决办法:
float torch.Tensor
,可能包含一些NaN值,我正在寻找一种有效的方法,用零替换其中的所有NaN值,或者将它们全部删除,并过滤掉另一个新的Tensor中的“有用”值
我知道这样做的一个简单方法是手动迭代给定张量中的所有值(并相应地将它们替换为零或拒绝新张量中的值)
是否有一些预定义的Torch功能或功能组合可以在性能方面更有效地实现这一点,这取决于Torch固有的CPU-GPU优化?好吧,看来在
Torch
检查NAN张量中没有任何功能。但是自从楠NaN,有一个解决办法:
a = torch.rand(4, 5)
a[2][3] = tonumber('nan')
nan_mask = a:ne(a)
notnan_mask = a:eq(a)
print(a)
0.2434 0.1731 0.3440 0.3340 0.0519
0.0932 0.4067 nan 0.1827 0.5945
0.3020 0.1035 0.5415 0.3329 0.7881
0.6108 0.9498 0.0406 0.9335 0.3582
[torch.DoubleTensor of size 4x5]
print(nan_mask)
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
[torch.ByteTensor of size 4x5]
有了这些掩码,您可以有效地提取NaN/not NaN值,并用您想要的任何值替换它们:
print(a[notnan_mask])
...
[torch.DoubleTensor of size 19]
a[nan_mask] = 42
print(a)
0.2434 0.1731 0.3440 0.3340 0.0519
0.0932 0.4067 42.0000 0.1827 0.5945
0.3020 0.1035 0.5415 0.3329 0.7881
0.6108 0.9498 0.0406 0.9335 0.3582
[torch.DoubleTensor of size 4x5]
亚历山大,谢谢。在网上做了更多的搜索之后,我发现了以下解决方案,与你的解决方案类似,它只需一行就能实现我想要的:
ws[ws:ne(ws)]=0
,其中,ws是权重的张量。@AdarshChauhan,这是完全相同的解决方案。