首页 > 解决方案 > 如何在 Keras python 中使用 ConvLSTM2D 和 Conv2D

问题描述

我正在尝试在 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

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

标签: pythonkeraslstmkeras-layer

解决方案


我认为你需要做一个时间分布的 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()

推荐阅读