首页 > 解决方案 > 指数小于 1 的 pytorch 数学返回 nan

问题描述

当给定范围 -1 和 1 之间的指数参数时,torch.pow() 返回 nan

a = torch.randn(1,3)
a

>> tensor([[-1.7871, -0.5375, -0.1164]])

torch.pow(a, 2)      #or a**2

>> tensor([[3.1938, 0.2889, 0.0136]])

torch.pow(a,0.5)     #or a**0.5

>> tensor([[nan, nan, nan]])

期望结果:

tensor([[-1.3368, -0.7331, -0.3412]])

编辑:事实证明 ** 也以同样的方式工作。a**2对张量做与 相同的事情torch.pow(a,2)a**0.5像 torch.pow 一样返回 nan。

标签: pythonfunctionpytorchdocumentation

解决方案


问题是负数的平方根是非实数复数。

如果你想保留符号并取其绝对值的平方根,下面的代码就可以了

torch.sign(a) * torch.pow(torch.abs(a), 0.5)

推荐阅读