python - 指数小于 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。
解决方案
问题是负数的平方根是非实数复数。
如果你想保留符号并取其绝对值的平方根,下面的代码就可以了
torch.sign(a) * torch.pow(torch.abs(a), 0.5)
推荐阅读
- javascript - 使用 ES6 而不重新刷新页面时,事件侦听器不会重新附加到我的 HTML 元素
- python - 在 Windows 子系统中运行 FEniCS 时添加无效语法错误
- django - 使用 ModelViewSet 时的 Django 休息框架发布请求
- c# - ASP.NET Core - 确定请求是否是本地的
- scrapy - Scrapy - 从表中提取数据
- go - ReadFile 在尝试读取文件时返回 nil
- python - 正则表达式与 numpy 和 panda 一起使用
- javascript - 如何从失败的获取请求中获取完整的错误?
- javascript - 带有 Websocket 或 Socket.io 的 Vue.js 实时图表
- swiftui - 如何访问类中的全局环境对象?