首页 文章

关于使用Convolutional layer 's output as LSTM' s输入

提问于
浏览
1

我有一个关于如何在Keras中将卷积层和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)

但看起来我的模型无法收敛......

1 回答

  • 0

    这似乎是一般的矩阵操作 . 您只需要在特征贴图的第一维将矩阵拆分为H矩阵,然后迭代地将它们中的每一个馈送到LSTM层 . 您将获得H 1 * W向量作为LSTM的输出,在第一维连接它们然后您将获得H * W输出 .

相关问题