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

时间:2018-12-16 22:08:53

标签: python machine-learning neural-network deep-learning data-science

{{1}}

我想用不同的优化器测试模型,但是我无法在网格搜索中添加优化器,当尝试拟合训练集时它会显示错误

ValueError:优化器不是合法参数

3 个答案:

答案 0 :(得分:0)

keras for scikit-learn的文档中说:

  

sk_params 同时接受模型参数和拟合参数。法律   模型参数是 build_fn 的参数。请注意,像所有   scikit-learn中的其他估算器, build_fn 应该提供默认值   其参数的值,以便您可以创建估算器   而不将任何值传递给 sk_params

def regex_maker(list1): new_list = ["^"] for i in range(1, len(list1)): new_list.append("(?=.*_"+list1[i]+")") new_list.append(".*$") str1 = "".join(new_list) return str1 将在GridSearchCV上调用get_params(),以获取可传递给它的有效参数列表,这些参数根据您的代码:

KerasClassifier

将为空(因为您未在KC = KerasClassifier(build_fn=build_classifier) 中指定任何参数)。

将其更改为以下内容:

build_classifier

之后,它应该可以工作了。参见带有scikit-learn的Keras的this example demonstrating the usage

答案 1 :(得分:0)

我认为如果您将 optimizer = 'adam' 添加为 build_classifier 的参数,然后将 optimizer=optimizer 添加为编译参数

from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV
def build_classifier(**optimizer='adam'):
  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=optimizer , 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)

答案 2 :(得分:0)

# Function to create model, required for KerasClassifier
def create_model( optimizer='adam'):
    model = Sequential()
    model.add(Dense(150, input_dim=13, activation='relu'))
    model.add(Dense(80, activation='relu'))
    model.add(Dense(2, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics= 
    ['accuracy'])
    return model
    

# create model
model = KerasClassifier(build_fn=create_model, verbose=0)
# define the grid search parameters
batch_size = [10, 20]
epochs = [10, 50]
optimizer = ['adam','rmsprop']
param_grid = dict(optimizer=optimizer,batch_size=batch_size, epochs=epochs)
grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1, cv=3)
grid_result = grid.fit(X, y)

第一个 optimizer=optimizer、第二个 batch_size=batch_size 和最后一个 epochs=epochs