ValueError: Unknown optimizer: optimizer

ValueError: Unknown optimizer: optimizer

我想进行超参数调整,所以我应用了 gridsearchCV,但在拟合过程中出现了 ValueError

from keras.wrappers.scikit_learn import KerasClassifier 
from sklearn.model_selection import GridSearchCV

def build_classifier(optimizer):
    ann = tf.keras.models.Sequential()
    ann.add(tf.keras.layers.Dense(units = 6, activation = 'relu'))
    ann.add(tf.keras.layers.Dense(units = 6, activation = 'relu'))
    ann.add(tf.keras.layers.Dense(units = 1, activation = 'sigmoid'))     #softmax in case of more than 2 classes
    ann.compile(optimizer = 'optimizer', loss = 'binary_crossentropy', metrics = ['accuracy']) #categorical_crossentropy in case of categories > 2
    return ann

ann = KerasClassifier(build_fn = build_classifier)

parameters = {'batch_size': [25,32],
              'epochs' : [10,100],
              'optimizer' : ['adam', 'rmsprop']}

grid_search = GridSearchCV(estimator = ann,
                           param_grid = parameters,
                           scoring = 'accuracy',
                           cv = 10)
grid_search = grid_search.fit(X_train, y_train)

而不是将 'optimizer' 字符串传递给 compile() 传递函数参数 optimizer.

import tensorflow as tf
from sklearn.model_selection import GridSearchCV

def build_classifier(optimizer):
    ann = tf.keras.models.Sequential()
    ann.add(tf.keras.layers.Dense(units = 6, activation = 'relu'))
    ann.add(tf.keras.layers.Dense(units = 6, activation = 'relu'))
    ann.add(tf.keras.layers.Dense(units = 1, activation = 'sigmoid'))    
    ann.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy'])
    return ann

ann = tf.keras.wrappers.scikit_learn.KerasClassifier(build_fn = build_classifier)
    
parameters = {'batch_size': [25,32],
              'epochs': [10, 100],
              'optimizer': ['Adam', 'RMSprop']}

grid_search = GridSearchCV(estimator=ann,
                           param_grid=parameters,
                           scoring= 'accuracy',
                           cv=10)

grid_search = grid_search.fit(X, y)