【问题标题】:About using Convolutional layer's output as LSTM's input关于使用卷积层的输出作为 LSTM 的输入
【发布时间】:2018-02-03 22:26:38
【问题描述】:

我有一个关于如何在 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)

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

【问题讨论】:

标签: python keras lstm


【解决方案1】:

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

【讨论】:

  • 是的,它确实是一个矩阵操作。但是我不确定我是否在 Keras 中实现了这一点,是否需要创建一个层来执行此操作?
  • @simbabuffalo 我没有使用 keras,但我认为这是一个普遍的问题。我不明白为什么你需要另一层来这样做,因为它不需要任何转换。
猜你喜欢
  • 1970-01-01
  • 2016-05-17
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多