从 GridSearchCV 模型中获取每个时期的验证分数



我正在使用带有keras的GridSearchCV,我想绘制和分析训练与验证历史。然而,我已经查看了文档,并确实搜索了SO,但当使用GridSearchCV拟合模型时,我找不到获得验证历史(即每个历元的分数(的方法。我可以在回调中获得训练历史记录,但不能获得验证历史记录。问题是有些模型过拟合很多,我想看看参数的调整是如何影响过拟合的。

我使用的GridSearchCV是这样的:

class MyCallback(keras_callbacks.Callback):
def on_train_end(self, logs=None):
# here I can get the model history from self.model.history.history
def create_model(...):
...
model = Model(...)
model.compile(optimizer=optimizer, loss="binary_crossentropy", metrics=['acc'])
return model
callbacks = [MyCallback()]
model = KerasClassifier(build_fn=create_model, verbose=3)
grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=4, cv=3, verbose=10, return_train_score=True)
grid_result = grid.fit(X_train["padded"], y_train["binary"], epochs=30, batch_size=16, callbacks=callbacks)

当您适合Keras模型时,您希望跟踪验证性能,如使用validation_datavalidation_split(请参阅此处获取参考(。

然而,GridSearchCV(来自sklearn(并不聪明地理解(在CV分割期间创建的(验证集必须与KerasClassifier一起用作validation_data,以便跟踪每个历元的分数/损失。

换句话说,您无法使用GridSearchCV跟踪每个验证集(在CV拆分期间创建(的性能

这是一个可能的解决方案。

最新更新