如何在Keras中用LSTM添加Conv2D层?

时间:2019-05-24 13:33:09

标签: python keras conv-neural-network lstm

我正在尝试识别图像序列。我有2张图片,我需要确定第3张。都是彩色图像。

我遇到以下错误:

  

ValueError:检查输入时出错:预期   time_distributed_1_input具有5个维度,但具有   形状(32,128,128,6)

这是我的图层:

batch_size = 32
height = 128
width = 128
model = Sequential()
model.add(TimeDistributed(Conv2D(32, (3, 3), activation = 'relu'), input_shape=(batch_size, height, width, 2 * 3)))
model.add(TimeDistributed(MaxPooling2D(2, 2)))
model.add(TimeDistributed(BatchNormalization()))
model.add(TimeDistributed(Conv2D(32, (3, 3), activation='relu', padding='same')))
model.add(Dropout(0.3))
model.add(Flatten())
model.add(LSTM(256, return_sequences=True, dropout=0.5))
model.add(Conv2D(3, (3, 3), activation='relu', padding='same'))
model.compile(optimizer='adam')
model.summary()

我输入的图像形状为: (128、128、2 * 3)[当我连接2个输入图像时]

我的输出图像形状是: (128,128,3)

1 个答案:

答案 0 :(得分:0)

您已在Flatten()之后应用了conv层。这会导致错误,因为经过扁平化后,流经网络的数据不再是2D对象。

我建议您将卷积阶段和循环阶段保持分开。首先,将卷积应用于图像,训练模型以提取其相关特征。稍后,将这些功能推入LSTM层,以便您还可以捕获其顺序中隐藏的信息。

希望这会有所帮助,否则请告诉我。

-

编辑

根据您收到的错误,似乎您也没有提供确切的输入形状。凯拉斯说:“我需要5个尺寸,但您给了我4个尺寸”。 TimeDistributed()层需要如下形状:(sample, time, width, length, channel)。您的输入内容显然缺少time

我建议您在运行之前先打印model.summary(),然后检查称为time_distributed_1_input的层。那是您的编译器不满意的。