PyTorch 1.5.0与1.9.0版本FFT输出差异的对齐解决方案
PyTorch 不同版本FFT接口(torch.rfft 转 torch.fft 族)适配方案
偏差成因
- 你提供的PyTorch 1.5.0测试代码存在变量名拼写错误:计算得到的FFT结果存储在
ftt_arr变量中,但打印的是fft_arr变量,导致你贴出的1.5.0版本输出并非本次rfft计算的真实结果,出现了普遍±1的偏差。 - 接口调用参数匹配不严谨:老版本
torch.rfft的第二个参数signal_ndim=2明确指定了计算2维FFT,虽然fftn默认也会计算所有维度的FFT,但显式指定维度可以避免输入维度变化时出现逻辑错误。
正确适配方案
老版本torch.rfft(input, signal_ndim=N, onesided=False, normalized=False)的等价新版本实现如下:
# 对应signal_ndim=2的场景 fft_arr = torch.fft.fft2(arr, dim=(-2, -1), norm="backward") fft_arr = torch.view_as_real(fft_arr)
如果是其他维度的FFT,可以对应替换:
- 1维FFT:替换为
torch.fft.fft(input, dim=-1) - 3维FFT:替换为
torch.fft.fft3(input, dim=(-3,-2,-1)) - 通用N维FFT:可以用
torch.fft.fftn(input, dim=tuple(range(-N, 0)))
验证结果
修正1.5.0版本代码的拼写错误后,重新运行得到的真实rfft输出,和上述适配代码在1.9.0版本得到的输出完全一致,误差在浮点精度范围内(1e-15级别)。
内容的提问来源于stack exchange,提问作者nbarron
相关产品推荐
相关产品推荐

