如何在TensorFlow中使用可微分傅里叶变换?

问题描述 投票:0回答:1

我想在TensorFlow中进行直接逆傅里叶变换。特别是,我想把它写成一个可以轻松集成到神经网络中的函数,它必须是可微分的。

在实践中,我希望能够写出这样的东西。

x = tf.layers.conv2d(input_tensor)
x = tf.nn.relu(x)

X = fourier_transform(x)
Y = X + something_else
y = inverse_fourier_transform(Y)

z = tf.layers.conv2d(y)
z = tf.nn.relu(z)

....

我已经找到了这样的实现 fft2d 的FFT,以及 ifft2dirfft2d 的反FFT,但我不知道它们是否可以微分。另外,我不知道ifft和irfft的区别。

谢谢。

G.

tensorflow deep-learning conv-neural-network fft cnn
1个回答
1
投票

FFT只是一种计算DFT的有效算法(使用因子化)。

DFT只是一个特殊的复值方阵或基数变换的乘法(因此是线性的和可微分的,因为DFT矩阵的基数向量是正交的,因此是非可微分的)。

IFFT是FFT的全复数结果的反变换。 一个irfft,假设FFT向量是共轭对称的(因此irfft只需要一半的FFT数据,因为另一半是多余的),这就产生了一个严格的实数IFFT结果(因此在复数IFFT结果中不需要任何虚分量)。 所以irfft的输入和输出都可以是IFFT的一半。

© www.soinside.com 2019 - 2024. All rights reserved.