等效于最新 PyTorch 版本中的 torch.rfft()
pytorch 775
原文标题 :Equivalent to torch.rfft() in newest PyTorch version
我想估计给定大小图像的傅立叶变换BxCxWxH
在以前的火炬版本中,以下工作完成了:
fft_im = torch.rfft(img, signal_ndim=2, onesided=False)
输出大小为:
BxCxWxHx2
但是,使用新版本的 rfft :
fft_im = torch.fft.rfft2(img, dim=2, norm=None)
我没有得到相同的结果。我错过了什么吗?
回复
我来回复-
jodag 评论
根据thedocs
dim(Tuple[int], optional) – 要转换的维度。默认值:最后两个维度。
你指定
dim=2
。 anint
for 这个参数的行为没有记录,应该可能导致异常。深入研究源代码,看来fft.rfft
和fft.rfft2
都是对fft.rfftn
的有效引用。这意味着如果您提供这样的int
,您的调用等效于torch.fft.rfft(img, dim=2, norm=None)
,即沿暗淡 2(第三维)进行 1D FFT。这显然不是你想要的。相反,您应该为它提供一个维度的元组或一起省略参数并依赖默认值。
fft_im = torch.fft.rfft2(img, dim=(-2, -1), norm=None)
老实说,这个函数的输入参数没有类型检查,这有点奇怪。几乎所有 PyTorch 函数都对输入参数进行了一些至少基本的检查,以减少此类意外行为的可能性。我猜这是开发人员的疏忽。
2年前