如何解决tf.signal.rfft2d输出形状?
当前,我正在尝试实现Fourier CNN。
对我来说,第一步是了解real fourier transform生成的输出形状。
我下面有一些代码段:
unordered_map
最后一个维度在哪里:2来自哪里?输出不应该仍然有三个通道产生(无,150、150、3)吗?
我尝试了另一个fft_length来查看它是否对我有帮助,但它使我比起初时更加困惑
input = Input(shape=(150,150,3))
f = Lambda(lambda x: tf.signal.rfft2d(x))(input)
print(f.shape,f.dtype)
# > (None,2) <dtype: 'complex64'>
我的问题主要是: 形状(无,150、150、2)从何而来?
作为奖励,我也想理解为什么第二个代码段会导致(None,150,100,51)
谢谢!
解决方法
通过一些额外的测试,我已经能够解决我的问题。
您似乎需要确保其他通道必须位于最内侧。我已经能够获得上面的代码以进行以下修改:
def fft_on_axis(x):
x = tf.transpose(x,perm=[0,3,1,2],)
x_fft = tf.signal.rfft2d(x)
result = tf.transpose(x_fft,2,1])
return result
i = Input(shape=(150,150,3),name='Input')
x = Lambda(fft_on_axis,name='fft2d')(i)
print(x.shape)
> (None,76,3)
这符合我对文档的期望!将第二维的fft_length切成一半,再加上零表示零频率项。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。