使用提前停止 - gridsearchcv - kerasregressor

Posted

技术标签:

【中文标题】使用提前停止 - gridsearchcv - kerasregressor【英文标题】:Use early stopping - gridsearchcv - kerasregressor 【发布时间】:2020-10-12 06:19:24 【问题描述】:

这是我的问题:如何在我的代码中使用提前停止?我应该放在哪个部分?

callbacks=[tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=10,mode="auto")]

我的代码:


numpy.random import seed
seed(1)

def create_model(optimizer='rmsprop'):
    model = Sequential()
    model.add(LSTM(50, activation='relu', return_sequences=True))
    model.add(LSTM(50, activation='relu'))
    model.add(Dense(1))

    model.compile(loss='mse',optimizer = optimizer)

    return model

clf = KerasRegressor(build_fn=create_model,epochs = 500,callbacks=[tf.keras.callbacks.EarlyStopping( patience=10)])

param_grid = 
'clf__optimizer' : ['adam','rmsprop'],
'clf__batch_size' : [500,45,77]


pipeline = Pipeline([
('clf',clf)
])

from sklearn.model_selection import TimeSeriesSplit, GridSearchCV

tscv = TimeSeriesSplit(n_splits=5)

grid = GridSearchCV(pipeline, cv=tscv,param_grid=param_grid,return_train_score=True,verbose=10,
scoring = 'neg_mean_squared_error')

grid.fit(Xtrain2,ytrain.values)

grid.cv_results_

我在 'grid.fit' 和 'param_grid' 中添加了回调,但我得到了错误!!!

【问题讨论】:

【参考方案1】:

回调在KerasRegressor.fit (docs) 中指定,GridSearchCV.fit 承认fit_params 关键字参数。来自docs:

**fit_params : str 的字典 -> 对象

传递给估算器fit方法的参数

类似

grid.fit(Xtrain2, ytrain.values, callbacks=[...])

通常应该有效。在您的情况下,因为您已经嵌入到管道中,所以您需要将范围附加到模型,因为

grid.fit(Xtrain2, ytrain.values, clf__callbacks=[...])

另请参阅Can I send callbacks to a KerasClassifier?,尽管该问题中还有很多其他问题。

【讨论】:

【参考方案2】:

你需要使用model.fit()函数直接训练keras模型,你会看到它允许你传入一个回调参数

【讨论】:

我在model.fit() 中使用提前停止没有问题,但我坚持使用交叉验证来避免过度拟合,所以我必须使用gridsearchcv。有什么方法可以同时使用这两种方法吗? gridsearchcvearly_stopping ??

以上是关于使用提前停止 - gridsearchcv - kerasregressor的主要内容,如果未能解决你的问题,请参考以下文章

使用 GridSearchCV 提前停止 - 使用保留的 CV 集进行验证

XGBoost 提前停止 cv 与 GridSearchCV

在 scikit-learn 中训练神经网络时提前停止

GridSearchCV 处理的出口与评分值连接

如何同时使用交叉验证和提前停止?

自定义 k-means 聚类 GridSearchCV