2017-08-25 422 views
1

我有一个关于如何在Keras中一起工作的卷积层和LSTM层的问题。关于使用卷积层的输出作为LSTM的输入

假设我正在使用CNN来确定图像的特征映射。在特定的卷积层之后,我有一个特征映射,例如F,其维数是(H,W,C)。现在,我想使用此特征映射的每一行,如[1 ::],[2 ::],.....作为跟随的LSTM层的输入,但重复H次。

LSTM的输出是(H,W)张量。

有没有办法做到这一点在keras与默认图层?或者我需要实现一个自定义图层?

感谢


我想在我的模型使用Timedistributed层,但它不工作。其实,我想要实现的是link的简化版本。

在这里,我只想使用LSTM扫描我的Conv2D输出的每一行并标记它的每个像素。我的代码是像以下:

input_img = Input(shape=(256,256,1)) 

# encoder 
x = Conv2D(filters=16, kernel_size=(5,5))(input_img) 
x = MaxPooling2D((2, 2), padding='same')(x) # 128x128 
x = Conv2D(filters=32, kernel_size=(3,3))(x) 
encoded = MaxPooling2D((2, 2), padding='same')(x) # 64x64 

# decoder 
x = Conv2D(filters=32, kernel_size=(3,3))(encoded) 
x = UpSampling2D((2, 2))(x) 
x = Conv2D(filters=16, kernel_size=(5,5))(x) 
x = UpSampling2D((2, 2))(x) 

# Using LSTM to produce final outputs 
decoded = TimeDistributed(LSTM(3, input_shape=(32, 16),return_sequences=True))(x) 

model = Model(input_img, decoded) 

但它看起来像我的模型不能收敛......

+0

请参阅下面的标题为“Visual question answering model”的例子:https://keras.io/getting-started/functional-api-guide/,它可能是相关的。 –

回答

0

这似乎是一个通用矩阵操作。您只需要在特征映射的第一维将矩阵拆分为H矩阵,然后将它们中的每一个迭代地提供给LSTM层。您将获得H 1 * W向量作为LSTM的输出,并将它们连接到第一维,然后您将获得一个H * W输出。

+0

是的,这确实是一个矩阵操纵。但我不确定我是否会在Keras中实现这个功能,是否需要创建一个图层来执行此操作? –

+0

@simbabuffalo我没有使用keras,但我认为这是一个普遍的问题。我不明白为什么你需要另一个图层来做这件事,因为它不需要任何变形。 –

相关问题