等效于最新 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)

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

原文链接:https://stackoverflow.com//questions/71515439/equivalent-to-torch-rfft-in-newest-pytorch-version

回复

我来回复
  • jodag的头像
    jodag 评论

    根据thedocs

    dim(Tuple[int], optional) – 要转换的维度。默认值:最后两个维度。

    你指定dim=2。 anintfor 这个参数的行为没有记录,应该可能导致异常。深入研究源代码,看来fft.rfftfft.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年前 0条评论