Python Keras交叉验证:输出广播错误
我在应用k折叠层叠时遇到问题。下面你可以找到我的架构,它工作得很好。它由两个信号输入组成,这两个信号输入在特征提取之后与inputB、InputUTC和inputD连接: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,))
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)
我知道我的输入似乎没有正确的形状。但是我不明白为什么。当我训练我的神经网络时,我输入相同的信息