Python Keras model.evaluate()和交叉验证分数之间的差异
因为我有一个非常小的数据集,所以我使用交叉验证以以下方式计算训练/验证错误:Python Keras model.evaluate()和交叉验证分数之间的差异,python,pandas,keras,neural-network,Python,Pandas,Keras,Neural Network,因为我有一个非常小的数据集,所以我使用交叉验证以以下方式计算训练/验证错误: for train, val in cv.split(x_train, y_train): model = Sequential() # create first hidden layer model.add(Dense(units=6, input_dim=n_features, activation='relu')) #create additional hidden layer model.add(D
for train, val in cv.split(x_train, y_train):
model = Sequential()
# create first hidden layer
model.add(Dense(units=6, input_dim=n_features, activation='relu'))
#create additional hidden layer
model.add(Dense(units=6, activation='relu'))
#add Dropout layer
model.add(Dropout(0.2))
# create additional hidden layer
model.add(Dense(units=6, activation='relu'))
# create last layer
model.add(Dense(units=1, activation='sigmoid'))
#Define optimizer
opt = keras.optimizers.Adam(0.002)
# compile model
model.compile(optimizer=opt, loss='mse', metrics=['mae'])
# fit model to training data
history = model.fit(x_train[train], y_train[train],batch_size=32, epochs=250,verbose=0)
#Evaluate the model on validation data
scores = model.evaluate(x_train[val], y_train[val], verbose=0)
cvscores_loss.append(scores[0])
cvscores_metric.append(scores[1])
# Print scores
print('Average MSE:', np.mean(cvscores_loss))
print('Average MAE:', np.mean(cvscores_metric))
当我现在对培训数据使用model.evaluate()时:
train_loss = model.evaluate(x_train, y_train, verbose=0)[0]
train_mae = model.evaluate(x_train, y_train, verbose=0)[1]
print('training loss (MSE):', train_loss, '\ntraining MAE:', train_mae)
我得到了不同的MSE和MAE。
这是因为model.evaluate()在训练后获取神经网络的状态,并在整个训练数据集上对其进行评估,而在交叉验证过程中,会计算所有k倍的平均误差吗
谢谢澄清!
米歇尔