【问题标题】:How to use ConvLSTM2D followed by Conv2D in Keras python如何在 Keras python 中使用 ConvLSTM2D 和 Conv2D
【发布时间】:2018-06-20 22:45:33
【问题描述】:

我正在尝试在 Keras 中使用以下模型,其中ConvLSTM2D 输出后跟Conv2D 以生成类似分段的输出。输入和输出应该是每个大小为(2*WINDOW_H+1, 2*WINDOW_W+1) 的时间序列

model = Sequential()
model.add(ConvLSTM2D(3, kernel_size=3, padding = "same", batch_input_shape=(1, None, 2*WINDOW_H+1, 2*WINDOW_W+1, 1), return_sequences=True, stateful=True))
model.add(Conv2D(1, kernel_size=3, padding = "same"))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()

但是,这会产生以下错误(添加 Conv2D 时):

Input 0 is incompatible with layer conv2d_1: expected ndim=4, found ndim=5

任何关于我可能出错的地方的指针都非常感谢。谢谢!

【问题讨论】:

    标签: python keras lstm keras-layer


    【解决方案1】:

    我认为您需要做一个时间分布的 Conv2D 层,以便尺寸匹配。可能是这样的:

    model = Sequential()
    model.add(ConvLSTM2D(3, kernel_size=3, padding = "same", batch_input_shape=(1, None, 2*WINDOW_H+1, 2*WINDOW_W+1, 1), return_sequences=True, stateful=True))
    model.add(TimeDistributed((Conv2D(1, kernel_size=3, padding = "same")))
    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
    model.summary()
    

    【讨论】:

      【解决方案2】:

      您的模型中的问题是您尝试将序列用于常规卷积层。 您唯一需要做的就是删除ConvLSTM2D 中的return_sequences=True

      所以这一行:

      model.add(ConvLSTM2D(3, kernel_size=3, padding = "same", batch_input_shape=(1, None, 2*WINDOW_H+1, 2*WINDOW_W+1, 1), return_sequences=True, stateful=True))
      

      应该是这样的:

      model.add(ConvLSTM2D(3, kernel_size=3, padding = "same", batch_input_shape=(1, None, 2*WINDOW_H+1, 2*WINDOW_W+1, 1), stateful=True))
      

      【讨论】:

        【解决方案3】:

        Conv2D之前的ConvLSTM2D层中,你使用的return_sequence是False。运行程序后,可以得到结果ndim=4。

        【讨论】:

          猜你喜欢
          • 2019-10-15
          • 2018-01-15
          • 1970-01-01
          • 2019-11-06
          • 2018-08-31
          • 1970-01-01
          • 2019-09-05
          • 2019-09-19
          • 1970-01-01
          相关资源
          最近更新 更多