在Keras中進行超參數調優可以使用GridSearchCV或RandomizedSearchCV來搜索最佳參數組合。以下是一個示例代碼:
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import RandomizedSearchCV
from sklearn.datasets import make_classification
# 創建一個簡單的神經網絡模型
def create_model(optimizer='adam'):
model = Sequential()
model.add(Dense(units=32, input_dim=20, activation='relu'))
model.add(Dense(units=1, activation='sigmoid'))
model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy'])
return model
# 創建一個KerasClassifier對象
model = KerasClassifier(build_fn=create_model, epochs=10, batch_size=10, verbose=0)
# 定義需要搜索的超參數組合
param_grid = {'optimizer': ['adam', 'sgd', 'rmsprop'],
'batch_size': [10, 20, 30]}
# 使用GridSearchCV進行超參數搜索
grid = GridSearchCV(estimator=model, param_grid=param_grid)
grid_result = grid.fit(X_train, y_train)
# 輸出最佳參數組合和對應的準確率
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
# 使用RandomizedSearchCV進行超參數搜索
random = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=3)
random_result = random.fit(X_train, y_train)
# 輸出最佳參數組合和對應的準確率
print("Best: %f using %s" % (random_result.best_score_, random_result.best_params_))
在這個示例中,我們首先創建一個簡單的神經網絡模型,并使用KerasClassifier將其包裝成一個可供GridSearchCV或RandomizedSearchCV使用的分類器。然后定義了需要搜索的超參數組合param_grid,并在GridSearchCV和RandomizedSearchCV中進行搜索。最后輸出最佳參數組合和對應的準確率。