我无法在 gridsearch 中添加优化器参数

Cos*_*mic 9 python neural-network scikit-learn deep-learning keras

from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV
def build_classifier():
  classifier = Sequential()
  classifier.add(Dense(units = 6 , init='uniform' , activation= 'relu'))
  classifier.add(Dense(units = 6 , init='uniform' , activation= 'relu'))
  classifier.add(Dense(units = 1 , init='uniform' , activation= 'sigmoid'))
  classifier.compile(optimizer='adam' , loss = 'binary_crossentropy' , 
  metrics=['accuracy'])
  return classifier
KC = KerasClassifier(build_fn=build_classifier)
parameters = {'batch_size' : [25,32],
          'epochs' : [100,500],
          'optimizer':['adam','rmsprop']}
grid_search = GridSearchCV(estimator=KC , 
param_grid=parameters,scoring='accuracy',cv=10)
grid_search.fit(X_train,y_train)
Run Code Online (Sandbox Code Playgroud)

我想用不同的优化器测试模型。但我似乎无法在网格搜索中添加优化器。每当我运行该程序时,它都会显示有关拟合训练集的错误。

ValueError:优化器不是合法参数

Viv*_*mar 19

scikit-learnkeras文档说:

sk_params采用模型参数和拟合参数。合法的模型参数是build_fn的参数。请注意,与 scikit-learn 中的所有其他估算器一样,build_fn应为其参数提供默认值,以便您可以创建估算器而无需将任何值传递给sk_params

GridSearchCV会叫get_params()KerasClassifier,以获得可以传递给它的有效参数,根据你的代码的列表:

KC = KerasClassifier(build_fn=build_classifier)
Run Code Online (Sandbox Code Playgroud)

将为空(因为您没有在 中指定任何参数build_classifier)。

将其更改为:

# Used a parameter to specify the optimizer
def build_classifier(optimizer = 'adam'):
  ...
  classifier.compile(optimizer=optimizer , loss = 'binary_crossentropy' , 
  metrics=['accuracy'])
  ...
  return classifier
Run Code Online (Sandbox Code Playgroud)

之后它应该工作。请参阅此示例,演示如何将Keras 与 scikit-learn 结合使用。