Python 如何正确使用Numpy';Pytork中的s FFT函数?

Python 如何正确使用Numpy';Pytork中的s FFT函数?,python,numpy,pytorch,fft,Python,Numpy,Pytorch,Fft,我最近被介绍给PyTorch,并开始浏览图书馆的文档和教程。 在本教程中,在“无参数示例”下,使用名为BadFFTFunction的numpy创建了一个示例函数 功能状态的说明如下: “这一层在数学上没有什么特别有用的功能 对 它被恰当地命名为BadFFTFunction“ 函数及其用法如下所示: from numpy.fft import rfft2, irfft2 class BadFFTFunction(Function): def forward(self, input):

我最近被介绍给PyTorch,并开始浏览图书馆的文档和教程。 在本教程中,在“无参数示例”下,使用名为
BadFFTFunction
的numpy创建了一个示例函数

功能状态的说明如下:

“这一层在数学上没有什么特别有用的功能 对

它被恰当地命名为BadFFTFunction“

函数及其用法如下所示:

from numpy.fft import rfft2, irfft2

class BadFFTFunction(Function):

    def forward(self, input):
        numpy_input = input.numpy()
        result = abs(rfft2(numpy_input))
        return torch.FloatTensor(result)

    def backward(self, grad_output):
        numpy_go = grad_output.numpy()
        result = irfft2(numpy_go)
        return torch.FloatTensor(result)

def incorrect_fft(input):
    return BadFFTFunction()(input)

input = Variable(torch.randn(8, 8), requires_grad=True)
result = incorrect_fft(input)
print(result.data)
result.backward(torch.randn(result.size()))
print(input.grad)
不幸的是,我最近才开始学习信号处理,我不确定这个函数中的错误(可能很明显)在哪里

我想知道,如何修复这个函数,使其前向和后向输出正确


如何将
BadFFTFunction
固定,以便在PyTorch中使用可微FFT函数?

我认为错误在于:首先,尽管函数名中有FFT,但该函数只返回FFT输出的振幅/绝对值,而不是完整的复系数。而且,仅仅使用逆FFT来计算振幅梯度在数学上可能没有多大意义(?)


有一个名为的包,它试图使pytorch中的FFT函数可用。您可以看到一些自动添加功能的实验代码。另请注意本节中的讨论。

自1.8版起,PyTorch具有:

torch.fft.fft(输入)