Python 合并CNN和LSTM ValueError时出现尺寸错误:层顺序的输入0与层不兼容

Python 合并CNN和LSTM ValueError时出现尺寸错误:层顺序的输入0与层不兼容,python,keras,deep-learning,lstm,cnn,Python,Keras,Deep Learning,Lstm,Cnn,我正在研制一个语音识别系统。我想使用CNN和LSTM的混合,但它会产生以下错误: ValueError:层sequential_66的输入0与层不兼容:预期ndim=5,发现ndim=4。收到完整形状:[无,40174,1] 有人能帮我吗 我认为问题在于输入变量的形状,但我不知道如何解决它 num_rows = 40 num_columns = 174 num_channels = 1 num_labels = yy.shape[1] filter_size = 2 inputs = np.

我正在研制一个语音识别系统。我想使用CNN和LSTM的混合,但它会产生以下错误: ValueError:层sequential_66的输入0与层不兼容:预期ndim=5,发现ndim=4。收到完整形状:[无,40174,1] 有人能帮我吗

我认为问题在于输入变量的形状,但我不知道如何解决它


num_rows = 40
num_columns = 174
num_channels = 1
num_labels = yy.shape[1]
filter_size = 2

inputs = np.concatenate((x_train, x_test), axis=0)
inputs = inputs.reshape(inputs.shape[0], num_rows, num_columns,1)
targets = np.concatenate((y_train, y_test), axis=0)
#x_test = x_test.reshape(x_test.shape[0], num_rows, num_columns, num_channels)
num_folds = 10
kfold = KFold(n_splits=num_folds, shuffle=True)
histories=list()
all_scores=list()

acc_per_fold = []
loss_per_fold = []

fold_no = 1
for train, test in kfold.split(inputs, targets):
  
  model = Sequential()
  model.add(TimeDistributed(Conv2D(filters=16, kernel_size=3, activation='relu'), input_shape= (None,40, 174, 1)))
  model.add(TimeDistributed(MaxPooling2D(pool_size=3)))
  model.add(TimeDistributed(Dropout(0.2)))
  model.add(TimeDistributed(Flatten()))
  
  model.add(LSTM(64, return_sequences=False))
  model.add(Dropout(0.2))
  model.add(Dense(64, activation='relu'))
  
  model.add(Dense(num_labels, activation='softmax'))
  model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer='adam')
  
  model.summary()

  num_epochs = 80
  num_batch_size = 64

  checkpointer = ModelCheckpoint(filepath='saved_models/weights.best.basic_cnn.hdf5', 
                               verbose=1, save_best_only=True)
  start = datetime.now()
  es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=10, min_delta=0.0001) 
  mc = ModelCheckpoint('saved_models/weights.best.basic_cnn.hdf5', monitor='val_accuracy', verbose=1, save_best_only=True, mode='max')


  history=model.fit(inputs[train], targets[train], batch_size=num_batch_size, epochs=num_epochs, callbacks=[es,mc], validation_data=(inputs[test], targets[test]), verbose=1)


  duration = datetime.now() - start
  print("Training completed in time: ", duration)
  # Generate generalization metrics
  scores = model.evaluate(inputs[test], targets[test], verbose=0)
  print(f'Score for fold {fold_no}: {model.metrics_names[0]} of {scores[0]}; {model.metrics_names[1]} of {scores[1]*100}%')
  acc_per_fold.append(scores[1] * 100)
  loss_per_fold.append(scores[0])
  histories.append(history)
  all_scores.append(scores)
  fold_no = fold_no + 1