我是机器学习的初学者,想训练一个具有优化的超参数的 CNN(用于图像识别),例如 dropout 率、学习率和 epoch 数。
我尝试通过 Scikit-learn 的 GridSearchCV 找到最佳超参数。我经常读到 GridSearchCV 可以与提前停止结合使用,但我找不到演示这点的示例代码。
使用 EarlyStopping 我会尝试找到最佳时期数,但我不知道如何将 EarlyStopping 与 GridSearchCV 或至少与交叉验证结合起来。
谁能给我一个关于如何做到这一点的提示,这将是一个很大的帮助?
我当前的代码如下所示:
def create_model(dropout_rate_1=0.0, dropout_rate_2=0.0, learn_rate=0.001):
model = Sequential()
model.add(Conv2D(32, kernel_size=(3,3), input_shape=(28,28,1), activation='relu', padding='same')
model.add(Conv2D(32, kernel_size=(3,3), activation='relu', padding='same')
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(dropout_rate_1))
model.add(Dense(128, activation='relu'))
model.add(Dropout(dropout_rate_2))
model.add(Dense(10, activation='softmax'))
optimizer=Adam(lr=learn_rate)
model.compile(loss='categorical_crossentropy', optimizer=optimizer,
metrics=['accuracy'])
return model
model = KerasClassifier(build_fn=create_model, epochs=50, batch_size=10, verbose=0)
epochs = [30, 40, 50, 60]
dropout_rate_1 = [0.0, 0.2, 0.4, 0.6]
dropout_rate_2 = [0.0, 0.2, 0.4, 0.6]
learn_rate = [0.0001, 0.001, 0.01]
param_grid = dict(dropout_rate_1=dropout_rate_1, dropout_rate_2=dropout_rate_2,
learn_rate=learn_rate, epochs=epochs)
grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1, cv=5)
grid_result = grid.fit(X, y)