有没有办法使python中的输入通道的数量等于过滤器的尺寸?

时间:2019-03-23 21:11:28

标签: python-3.x keras lstm

我在这里要使python中的输入通道数等于过滤器尺寸的问题

我已经尝试过重塑,但是它给了我同样的错误..因为我是python的新手,所以我不明白如何解决我的错误 我的模型是将cnn与lstm层组合在一起,我有2892个训练图像和1896个测试图像,总共4788个图像,每个图像的尺寸为128 * 128

这是我尝试过的代码

cnn_model = Sequential()

cnn_model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(128,128,3)))
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))

cnn_model.add(Conv2D(32, (3, 3), activation='relu'))
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))

cnn_model.add(Conv2D(64, (3, 3), activation='relu'))
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))

cnn_model.add(Conv2D(128, (3, 3), activation='relu'))
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))
cnn_model.add(Flatten())

model = Sequential()
model.add(TimeDistributed(cnn_model, input_shape=(1,128, 128,3)))
model.add(LSTM(16, return_sequences=True, dropout=0.5))
model.add(Dense(1, activation='softmax'))
model.compile(optimizer='adadelta', loss='categorical_crossentropy', metrics=['accuracy'])

X_data = np.array(X_data)
X_datatest = np.array(X_datatest)
X_data= X_data.astype('float32') / 255.
X_datatest = X_datatest.astype('float32') / 255.


hist=model.fit(X_data, X_data,epochs=15,batch_size=128,verbose = 2,validation_data=(X_datatest, X_datatest))

尝试先前的代码时出现以下错误

  

回溯(最近通话最近):文件   “ C:\ Users \ bdyssm \ Desktop \ Master \ LSTMCNN2.py”,第219行,在       hist = model.fit(X_data,X_data,epochs = 15,batch_size = 128,verbose = 2,validation_data = {X_datatest,X_datatest))文件   “ C:\ Users \ bdyssm \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ keras \ engine \ training.py”,   线952,适合       batch_size =批处理大小)文件“ C:\ Users \ bdyssm \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ keras \ engine \ training.py”,   _standardize_user_data中的第751行       exception_prefix ='input')文件“ C:\ Users \ bdyssm \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ keras \ engine \ training_utils.py”,   第128行,位于standardize_input_data中       'with shape'+ str(data_shape))ValueError:检查输入时出错:预期的time_distributed_1_input具有5个维度,但得到了   形状为(2892,28,28,3)的数组

这是模型摘要 enter image description here

这是cnn_model摘要

enter image description here

1 个答案:

答案 0 :(得分:1)

问题是您的cnn_model已将信号的形状更改为具有3个颜色通道的128个通道,但是在声明model的输入形状时没有考虑到这一点。

cnn_model检查cnn_model.summary()的输出形状,并确保输入形状model等于cnn_model的输出形状。