Python Keras交叉验证:输出广播错误

Python Keras交叉验证:输出广播错误,python,tensorflow,keras,cross-validation,Python,Tensorflow,Keras,Cross Validation,我在应用k折叠层叠时遇到问题。下面你可以找到我的架构,它工作得很好。它由两个信号输入组成,这两个信号输入在特征提取之后与inputB、InputUTC和inputD连接: def small_model2(): ampl_signal = Input(shape=(X_train.shape[1:])) phase_signal = Input(shape=(X_train_phase.shape[1:])) inputA= Input(shape=(1,))

我在应用k折叠层叠时遇到问题。下面你可以找到我的架构,它工作得很好。它由两个信号输入组成,这两个信号输入在特征提取之后与inputB、InputUTC和inputD连接:

def small_model2(): 
    
    ampl_signal = Input(shape=(X_train.shape[1:]))
    phase_signal = Input(shape=(X_train_phase.shape[1:]))
    inputA= Input(shape=(1,))
    inputB= Input(shape=(1,))
    inputC= Input(shape=(1,))
    
    concat_signal = concatenate([ampl_signal, phase_signal])
    #x = InputLayer(input_shape=(None, X_train.shape[1:][0],1))(inputA)
    x = Conv1D(64, 5, activation='relu',kernel_initializer='glorot_normal')(concat_signal) #, input_shape=(None, 3750, n_features)
    x = Conv1D(64, 5, activation='relu',kernel_initializer='glorot_normal')(x)
   # x = Dropout(0.1)(x)
    x = MaxPooling1D(5)(x) 
   # x = Conv1D(128, 5, activation='relu',kernel_initializer='glorot_normal')(x) #, input_shape=(None, 3750, n_features)
   # x = Conv1D(128, 5, activation='relu',kernel_initializer='glorot_normal')(x)
   # x = Dropout(0.1)(x)
   # x = MaxPooling1D(5)(x)   
    x = Conv1D(64, 5, activation='elu',kernel_initializer='glorot_normal')(x)
    x = Conv1D(64, 5, activation='elu',kernel_initializer='glorot_normal')(x)
    #x = Dropout(0.1)(x)
    # x = Dropout(0.2)(x)
    #x = Flatten()(x)
    x = GlobalAveragePooling1D()(x)
    concatenated_features = concatenate([x,inputB,inputC, inputD])#inputD
    x = Dense(64,activation='relu')(concatenated_features)
    #
# Check for the position of the dropout
  #  x = Dropout(0.2)(x)
    x = Dense(n_outputs, activation='sigmoid')(x)

    model = Model(inputs=[ampl_signal, phase_signal, inputB,inputC, inputD], outputs=x)
    
    #optim = SGD(lr=lr, clipnorm=1.)
    optim = Adam(lr=lr)
    model.compile(loss='binary_crossentropy',
                  optimizer=optim,
                  metrics=['accuracy'])
    #print(model.summary())
    return model
之后,我尝试应用k-折叠交叉验证:

from sklearn.model_selection import KFold

acc_per_fold = []
loss_per_fold = []


num_folds = 4
kfold = KFold(n_splits=num_folds, shuffle=True)

fold_no = 1


#inputs = np.c_[X_train,X_train_phase, train_moisture,train_temp, train_weight]
#targets = y_train

inputs = np.concatenate(([X_train,X_train_phase, train_moisture,
                          train_temp, train_weight], 
                        [X_test, X_val_phase, test_moisture, 
                         test_temp, test_weight]), axis=0)
targets = np.concatenate((y_train, y_test), axis=0)

for train, test in kfold.split(inputs, targets):
    model=small_model()
    #history=model.fit([X_train,X_train_phase, train_moisture,train_temp, train_weight], y_train,
    #              validation_data = ([X_test, X_val_phase, test_moisture, test_temp, test_weight], y_test),
    #              #validation_data=([X_val,val_weight,val_moisture,val_temp],y_train[val]), 
    #              epochs=100, batch_size=150)
    
    history = model.fit(inputs[train], targets[train],
              batch_size=batch_size,
              epochs=no_epochs,
              verbose=verbosity) 
    scores = model.evaluate([X_val,val_weight,val_moisture,val_temp],y_train[val], verbose=0)
#    
    print("%s: %.2f%%" % (model.metrics_names[0], scores[0]))
    print("%s: %.2f%%" % (model.metrics_names[1], scores[1]))
#    
  # 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])    
    
    loss_history =np.array(history.history["loss"])
    accuracy_history= np.array(history.history["acc"])
    val_loss_history = np.array(history.history["val_loss"])
    val_accuracy_history=np.array(history.history["val_acc"])#

    np.savetxt("outputs/accuracy_loss_history_64000-90000_down_5_CNN_lr_"+str(lr)+"_fold_"+str(i)+".txt",np.c_[loss_history,accuracy_history,val_loss_history,val_accuracy_history] , delimiter="\t")
    i+=1
    
    model.evaluate([X_test.reshape(len(X_test),5200,1),test_moisture,test_temp],y_test, verbose=0)
    
    fold_no = fold_no +1

但是,我不断收到一个广播错误:

ValueError:无法将输入数组从形状(19296249,1)广播到形状(1929)

我知道我的输入似乎没有正确的形状。但是我不明白为什么。当我训练我的神经网络时,我输入相同的信息