【问题标题】:Getting ValueError using GridSearchCV from sklearn使用 GridSearchCV 从 sklearn 获取 ValueError
【发布时间】:2021-11-12 04:53:03
【问题描述】:

我想使用 sklearn 中的 GridSearchCV 优化学习率,然后优化我模型的其他超参数。你可以在下面看到我的代码。不幸的是,我总是得到错误:ValueError: learning_rate is not a legal parameter

这里也有类似的问题("ValueError: activation is not a legal parameter" with Keras classifierlearning_rate is not a legal parameter),但对我没有帮助。我还更改了 lr 或 learn_rate 中的 learning_rate,但它不起作用。

# Sequential API
def create_model(learn_rate=0.01):
    model = Sequential()
    model.add(Dense(128, activation='relu'))
    model.add(Dense(32, activation='relu'))
    model.add(Dense(1))
    opt = keras.optimizers.Adam(lr=learn_rate)
    model.compile(optimizer=opt,
                loss='mean_squared_error',
                metrics=['mae', 'mean_absolute_percentage_error'])

    return model

# Hyperparameter Tuning
model = KerasRegressor(build_fn=create_model(), verbose=0)
param_grid = {'learning_rate': [0.001, 0.01, 0.1]}
grid = GridSearchCV(estimator=model, param_grid=param_grid, cv=5)
grid.fit(X_train, Y_train)
print(grid.best_params_)

希望有人可以帮助我解决我的问题。

【问题讨论】:

    标签: python scikit-learn valueerror gridsearchcv


    【解决方案1】:

    如果您在create_model 函数和参数网格param_grid 中都使用'learning rate' 作为参数,并且如果在KerasRegressor 中将create_model() 替换为create_model,您的代码似乎可以工作。

    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Dense
    from tensorflow.keras.optimizers import Adam
    from tensorflow.keras.wrappers.scikit_learn import KerasRegressor
    from sklearn.model_selection import GridSearchCV
    from sklearn.datasets import make_regression
    
    # Sequential API
    def create_model(learning_rate=0.01):
    
        model = Sequential()
        model.add(Dense(128, activation='relu'))
        model.add(Dense(32, activation='relu'))
        model.add(Dense(1))
    
        model.compile(
            optimizer=Adam(learning_rate=learning_rate),
            loss='mean_squared_error',
            metrics=['mae', 'mean_absolute_percentage_error']
        )
    
        return model
    
    # Sample data
    X, y = make_regression(n_samples=1000, n_features=10, random_state=100)
    
    # Hyperparameter Tuning
    estimator = KerasRegressor(build_fn=create_model, verbose=0)
    param_grid = {'learning_rate': [0.001, 0.01, 0.1]}
    grid = GridSearchCV(estimator=estimator, param_grid=param_grid, cv=5)
    grid.fit(X, y)
    print(grid.best_params_)
    # {'learning_rate': 0.1}
    

    【讨论】:

    • 谢谢你,它有效!不幸的是,我收到另一个错误:进程以退出代码 134 完成(被信号 6 中断:SIGABRT)但我认为这是另一个问题..
    猜你喜欢
    • 2018-01-05
    • 2016-02-10
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 2014-05-12
    • 2017-12-06
    • 2014-01-29
    相关资源
    最近更新 更多