使用提前停止 - 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
。有什么方法可以同时使用这两种方法吗? gridsearchcv
和 early_stopping
??以上是关于使用提前停止 - gridsearchcv - kerasregressor的主要内容,如果未能解决你的问题,请参考以下文章
使用 GridSearchCV 提前停止 - 使用保留的 CV 集进行验证