Bil*_*Kid 4 python fft deep-learning pytorch
我想估计给定尺寸图像的傅里叶变换BxCxWxH
在以前的火炬版本中,以下内容完成了这项工作:
fft_im = torch.rfft(img, signal_ndim=2, onesided=False)
Run Code Online (Sandbox Code Playgroud)
输出的大小为:
BxCxWxHx2
Run Code Online (Sandbox Code Playgroud)
但是,使用新版本的 rfft :
fft_im = torch.fft.rfft2(img, dim=2, norm=None)
Run Code Online (Sandbox Code Playgroud)
我没有得到相同的结果。我错过了什么吗?
几个问题
dim是无效类型,它应该是两个数字的元组或者应该被省略。实际上 PyTorch 应该引发异常。我认为这无一例外地运行的事实是 PyTorch 中的一个错误(我开了一张票,说明了这一点)。complex张量类型,因此 FFT 函数返回这些类型,而不是为实部/虚部添加新维度。您可以使用torch.view_as_real转换为旧的表示形式。还值得指出的是,它view_as_real不会复制数据,因为它返回一个视图,因此不应以任何明显的方式减慢速度。torch.fft.fft2,这与 PEP 20 的第 13 条格言相冲突。提供 FFT 的特殊实值版本的全部意义在于,您只需要计算每个维度的一半值,因为其余部分可以通过 Hermition 对称性质推断出来。所以从所有你应该能够使用的
fft_im = torch.view_as_real(torch.fft.fft2(img))
Run Code Online (Sandbox Code Playgroud)
重要如果您要传递给(例如或)fft_im中的其他函数,那么您需要使用 转换回复杂表示,以便这些函数不会将最后一个维度解释为信号维度。torch.fftfft.ifftfft.fftshifttorch.view_as_complex