使用估计器 KerasClassifier 进行随机 CV 值误差

问题描述 投票:0回答:1

尝试使用随机 CV 参数数组,但收到错误消息:

ValueError: Invalid parameter model_optimizer_learning_rate for estimator KerasClassifier.
This issue can likely be resolved by setting this parameter in the KerasClassifier constructor:
`KerasClassifier(model_optimizer_learning_rate=0.01)`
Check the list of available parameters with `estimator.get_params().keys()`

code: 
`
def create_model_v4(lr,batch_size):  
    np.random.seed(1337)
    model = Sequential()
    model.add(Dense(256,activation='relu',input_dim = X_train.shape[1]))
  ............................................................................
    model.add(Dense(32,activation='relu')) 
    model.add(Dense(1, activation='sigmoid'))

    #compile model
    optimizer = tf.keras.optimizers.Adam(learning_rate=lr)
    model.compile(optimizer = optimizer,loss = 'binary_crossentropy', metrics = ['accuracy'])
    return model

keras_estimator = KerasClassifier(build_fn=create_model_v4, verbose=1)


# define the grid search parameters
param_random = {
    'batch_size':[32, 64, 128],
    "lr":[0.01,0.1,0.001],}

kfold_splits = 3
random= RandomizedSearchCV(estimator=keras_estimator,  
                    verbose=1,
                    cv=kfold_splits,  
                    param_distributions=param_random,n_jobs=-1)
random_result = random.fit(X_train, y_train,validation_split=0.2,verbose=1) 

# Summarize results
print("Best: %f using %s" % (random_result.best_score_, random_result.best_params_))
means = random_result.cv_results_['mean_test_score']
stds = random_result.cv_results_['std_test_score']
params = random_result.cv_results_['params']``

我已经尝试过lr作为合适的learning_rate,我已经尝试过optimizer_lr等,但可能我没有实现我正确找到的解决方案。

python tensorflow keras neural-network gridsearchcv
1个回答
0
投票

学习率是优化器的参数,而不是模型的参数。因此,在 SciKeras 包装器中,您需要将参数路由到优化器。您可以使用网格字典中的前缀 optimizationr__ 来完成此操作。

尝试以下词典

param_random = {
    'batch_size':[32, 64, 128],
    "optimizer__learning_rate":[0.01,0.1,0.001],
    #"optimizer__lr":[0.01,0.1,0.001],
}

不确定是否应该像构造函数那样使用 lr 参数,还是 Keras 优化器默认参数 (learning_rate)。尝试两者并选择合适的。

我建议您使用以下资源来使用 SciKeras 包装器微调 Keras 模型。此案例和其他案例已得到解决。

https://machinelearningmastery.com/grid-search-hyperparameters-deep-learning-models-python-keras/

© www.soinside.com 2019 - 2024. All rights reserved.