python - 我无法在 gridsearch 中添加优化器参数
问题描述
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)
我想用不同的优化器测试模型。但我似乎无法在网格搜索中添加优化器。每当我运行该程序时,它都会显示有关拟合训练集的错误。
ValueError:优化器不是合法参数
解决方案
scikit-learn的 keras 文档说:
sk_params接受模型参数和拟合参数。合法的模型参数是build_fn的参数。请注意,与 scikit-learn 中的所有其他估算器一样,build_fn应该为其参数提供默认值,这样您就可以创建估算器而无需将任何值传递给sk_params。
GridSearchCV
将调用get_params()
以KerasClassifier
获取可以传递给它的有效参数列表,根据您的代码:
KC = KerasClassifier(build_fn=build_classifier)
将为空(因为您没有在 中指定任何参数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
之后它应该工作。
推荐阅读
- python - 遍历字典值以形成 URL
- java - 我有一个错误,我陷入了他的错误:E/RecyclerView:没有连接适配器;跳过布局
- python - 如何使用基于规则的任务生成器目标在 Waf 的源目录中输出?
- flutter - 从firebase中的文档获取子集合的颤振问题
- c# - 如何为复杂的 Json 有效负载设置属性及其值并进行序列化?
- github-actions - Github 操作:“找不到命令”
- node.js - 你如何在 TypeScript 中显式地设置 `global` 的新属性?
- c++ - 将持续时间值设为双倍
- ios - 是否可以在 CocoaPod 子模块之间共享私有 Swift 框架?
- javascript - 使用 Laravel Collective、Bootstrap 模型和 JavaScript 的客户端表单验证和路由?