【问题标题】:Use early stopping - gridsearchcv - kerasregressor使用提前停止 - 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' 中添加了回调,但我得到了错误!!!

【问题讨论】:

    标签: keras callback regression gridsearchcv early-stopping


    【解决方案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 ??
      猜你喜欢
      • 2017-08-17
      • 2017-09-18
      • 2021-05-08
      • 2018-09-20
      • 2021-04-13
      • 2018-04-18
      • 2020-11-16
      • 1970-01-01
      相关资源
      最近更新 更多