我正在尝试识别图像序列。我有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)
答案 0 :(得分:0)
您已在Flatten()
之后应用了conv层。这会导致错误,因为经过扁平化后,流经网络的数据不再是2D对象。
我建议您将卷积阶段和循环阶段保持分开。首先,将卷积应用于图像,训练模型以提取其相关特征。稍后,将这些功能推入LSTM层,以便您还可以捕获其顺序中隐藏的信息。
希望这会有所帮助,否则请告诉我。
-
编辑:
根据您收到的错误,似乎您也没有提供确切的输入形状。凯拉斯说:“我需要5个尺寸,但您给了我4个尺寸”。 TimeDistributed()
层需要如下形状:(sample, time, width, length, channel)
。您的输入内容显然缺少time
。
我建议您在运行之前先打印model.summary()
,然后检查称为time_distributed_1_input
的层。那是您的编译器不满意的。