首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >相当于torch.rfft()在最新的PyTorch版本

相当于torch.rfft()在最新的PyTorch版本
EN

Stack Overflow用户
提问于 2022-03-17 15:57:54
回答 1查看 1.5K关注 0票数 2

我想估计给定大小的BxCxWxH图像的傅里叶变换。

在以前的火炬版本中,下列人员完成了这项工作:

代码语言:javascript
运行
复制
fft_im = torch.rfft(img, signal_ndim=2, onesided=False)

输出的大小是:

代码语言:javascript
运行
复制
BxCxWxHx2

然而,对于新版本的rfft:

代码语言:javascript
运行
复制
fft_im = torch.fft.rfft2(img, dim=2, norm=None)

我没有得到同样的结果。我错过了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-17 16:45:13

几个问题

  1. 您提供的dim参数是无效类型,它应该是两个数字的元组,或者应该省略。实际上,PyTorch应该引发一个例外。我认为,这一运行毫无例外是PyTorch中的一个bug (我打开了一张声明同样多的票证),
  2. PyTorch现在supports complex tensor types,所以FFT函数返回这些,而不是为实/虚部分添加一个新的维度。可以使用torch.view_as_real将其转换为旧的表示形式。同样值得指出的是,view_as_real不复制数据,因为它返回视图,因此不应该以任何明显的方式减慢速度。
  3. PyTorch不再给出在RFFT中禁用单边计算的选项。可能是因为禁用单面使结果与torch.fft.fft2相同,这与PEP 20的第13条格言相冲突。提供一个特殊实值版本的FFT的全部意义是,您只需要计算每个维度的一半值,因为其余的值可以通过赫敏对称属性来推断。

所以从你应该能够使用的

代码语言:javascript
运行
复制
fft_im = torch.view_as_real(torch.fft.fft2(img))

如果要将重要传递给torch.fft中的其他函数(如fft.ifftfft.fftshift),则需要使用torch.view_as_complex将其转换回复杂表示形式,这样这些函数就不会将最后一个维度解释为信号维度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71515439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档