使用sklearn的GridSearchCV调优Keras模型时出现learning_rate非法参数错误
错误原因
- 初始化
KerasRegressor时build_fn参数传值错误:你传入了create_model()(带括号),相当于直接执行函数返回了固定模型实例,框架无法动态注入你要调优的超参数,应该传入不带括号的函数对象create_model - 超参数名不匹配:
param_grid中定义的键名必须和create_model的入参名完全一致,你的函数入参叫learn_rate,但参数网格里写的是learning_rate,名称不匹配导致框架无法识别该参数 - 可选兼容优化:高版本TensorFlow的Adam优化器已废弃
lr参数,统一使用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(learning_rate=learn_rate) model.compile(optimizer=opt, loss='mean_squared_error', metrics=['mae', 'mean_absolute_percentage_error']) return model # 超参数调优部分 model = KerasRegressor(build_fn=create_model, verbose=0) param_grid = {'learn_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_)
内容的提问来源于stack exchange,提问作者WieWie
相关产品推荐
相关产品推荐

