【发布时间】:2020-09-26 01:28:42
【问题描述】:
目前我正在努力实现Fourier CNN。
对我来说第一步是了解real fourier transform生成的输出形状。
我在下面有一些代码sn-ps:
input = Input(shape=(150, 150, 3))
f = Lambda(lambda x: tf.signal.rfft2d(x))(input)
print(f.shape, f.dtype)
# > (None, 150, 150, 2) <dtype: 'complex64'>
最后一个维度:2 来自哪里?输出不应该仍然有三个通道导致 (None, 150, 150, 3) 吗?
我尝试了另一个 fft_length,看看它是否能为我带来一些启示,但它让我比开始时更加困惑
input = Input(shape=(150, 150, 3))
f = Lambda(lambda x: tf.signal.rfft2d(x, fft_length=[100, 100]))(input)
print(f.shape, f.dtype)
# > (None, 150, 100, 51) <dtype: 'complex64'>
我的问题主要是: 形状 (None, 150, 150, 2) 是从哪里来的?
作为奖励,我也很想了解为什么第二个代码 sn-p 会导致 (None, 150, 100, 51)
谢谢!
【问题讨论】:
-
嗨卢克,2 来自 3/2+1 请参阅文档中的以下引用:由于真实信号的 DFT 是厄米对称的,RFFT2D 仅返回 fft_length / 2 + 1 唯一输出最内维的 FFT 分量:零频率项,然后是 fft_length / 2 个正频率项。 tensorflow.org/api_docs/python/tf/signal/rfft2d
标签: tensorflow machine-learning deep-learning signal-processing fft