首页 > 解决方案 > ValueError: 层序贯_2 的输入 0 与层不兼容:预期 ndim=5,发现 ndim=4。收到的完整形状:(无、10、250、250)

问题描述

我收到此代码的错误。我原来的 input_shape 是 (10,250,250,1) 。我将 tensorflow.keras 用于 Sequential。我的模型代码是:

import tensorflow as tf
from tensorflow.keras.layers import TimeDistributed, Conv2D, Dense, MaxPooling2D, Flatten, LSTM, Dropout, BatchNormalization
from tensorflow.keras.models import Sequential, load_model
model_cnlst = Sequential()
model_cnlst.add(TimeDistributed(Conv2D(128, (3, 3), strides=(1,1),activation='relu'),input_shape=(10, 250, 250, 1)))
model_cnlst.add(TimeDistributed(Conv2D(64, (3, 3), strides=(1,1),activation='relu')))
model_cnlst.add(TimeDistributed(MaxPooling2D(2,2)))
model_cnlst.add(TimeDistributed(Conv2D(64, (3, 3), strides=(1,1),activation='relu')))
model_cnlst.add(TimeDistributed(Conv2D(32, (3, 3), strides=(1,1),activation='relu')))
model_cnlst.add(TimeDistributed(MaxPooling2D(2,2)))
model_cnlst.add(TimeDistributed(BatchNormalization()))


model_cnlst.add(TimeDistributed(Flatten()))
model_cnlst.add(Dropout(0.2))

model_cnlst.add(LSTM(32,return_sequences=False,dropout=0.2)) # used 32 units

model_cnlst.add(Dense(64,activation='relu'))
model_cnlst.add(Dense(32,activation='relu'))
model_cnlst.add(Dropout(0.2))
model_cnlst.add(Dense(1, activation='sigmoid'))
model_cnlst.summary()

然后对于以下代码,我收到此错误:

 
 
 
 
 
 
 history_new_cnlst=model_cnlst.fit(train_dataset_new,train_labels,epochs=20,batch_size=10,validation_data=(validation_dataset_new,validation_labels),
callbacks=callbacks_list_cnlst)

错误消息是:

Epoch 1/20
....
----> 3                callbacks=callbacks_list_cnlst)

........

    ValueError: Input 0 of layer sequential_2 is incompatible with the layer: expected ndim=5, found ndim=4. Full shape received: (None, 10, 250, 250)

callbacks_list_cnlst的定义为:

callbacks_list_cnlst=[tensorflow.keras.callbacks.EarlyStopping(
monitor='acc',patience=3),
               tensorflow.keras.callbacks.ModelCheckpoint(
               filepath='cnn_lstm_model_new3.h5',
               monitor='val_loss',
               save_best_only=True),
                tensorflow.keras.callbacks.ReduceLROnPlateau(monitor = "val_loss", factor = 0.1, patience = 3)
               ]

标签: pythontensorflowkerasdeep-learningclassification

解决方案


推荐阅读