learning_rate 不是合法参数

Posted

技术标签:

【中文标题】learning_rate 不是合法参数【英文标题】:learning_rate is not a legal parameter 【发布时间】:2021-07-09 04:22:23 【问题描述】:

我正在尝试通过实现 GridSearchCV 来测试我的模型。但我似乎无法在 GridSearch 中添加学习率和动量作为参数。每当我尝试通过添加这些代码来执行代码时,都会出现错误。

这是我创建的模型:

def define_model(optimizers="SGD"):
    model = models.Sequential()
    model.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same', input_shape=(32, 32, 3)))
    model.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same'))
    model.add(MaxPooling2D((2, 2)))
    model.add(Flatten())
    model.add(Dense(128, activation='relu', kernel_initializer='he_uniform'))
    model.add(Dense(10, activation='softmax'))
    model.compile(loss='binary_crossentropy', optimizer=optimizers, metrics='accuracy')
    return model

我已经实现的 GridSearch:

learn_rate=(0.0001,0.001)
momentum = (0.1, 0.5)
epochs = [5]
batches = [16]

model = KerasClassifier(build_fn=define_model, verbose=2)
param_grid = dict(epochs = epochs, lr = learn_rate, momentum = momentum, batch_size = batches)
grid = GridSearchCV(estimator=model, param_grid= param_grid, n_jobs = 1, cv = 3)

grid_result = grid.fit(trainX, trainY)
print("Best: %f using %s" %(grid_result.best_score_, grid_result.best_params_))

这是我遇到的错误:

~\anaconda3\envs\tf-gpu\lib\site-packages\tensorflow\python\keras\wrappers\scikit_learn.py in check_params(self, params)
    104       else:
    105         if params_name != 'nb_epoch':
--> 106           raise ValueError(' is not a legal parameter'.format(params_name))
    107 
    108   def get_params(self, **params):  # pylint: disable=unused-argument

ValueError: lr is not a legal parameter

【问题讨论】:

查看 gridsearchcv 的文档 我只是偷看了我的一个旧脚本。通常学习率是lr,但是对于 GridSearchCV,我的字典键为learning_rate,尝试将lr = learn_rate 更改为learning_rate = learn_rate。希望这会有所帮助。 @LPR 试过了,但没用。不过感谢您的帮助。 【参考方案1】:

参数中没有优化器。因此,您无需将其作为参数放入函数中。相反,您可能需要在函数中提及 learning_rate 和动量作为参数,并直接在应有的位置添加 SGD:

def define_model(lr, momentum):
    model = models.Sequential()
    model.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same', input_shape=(32, 32, 3)))
    model.add(Conv2D(32, (3, 3), activation='relu', kernel_initializer='he_uniform', padding='same'))
    model.add(MaxPooling2D((2, 2)))
    model.add(Flatten())
    model.add(Dense(128, activation='relu', kernel_initializer='he_uniform'))
    model.add(Dense(10, activation='softmax'))
    model.compile(loss='binary_crossentropy', optimizer=SGD(lr, momentum), metrics='accuracy')

    return model

【讨论】:

以上是关于learning_rate 不是合法参数的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:传递给优化器的意外关键字参数:learning_rate

估计器 RegressorChain 的参数 learning_rate 无效(base_estimator=XGBRegressor

PySpark 中是不是有与 scikit-learn 的 sample_weight 等效的参数?

依赖 URL 查询参数的顺序是不是合法或安全?

在宏参数中使用 #line 指令是不是合法?

让函数指针模板参数接受右值引用是不是合法?