I'm a beginner in machine learning and want to train a CNN (for image recognition) with optimized hyperparameter like dropout rate, learning rate and number of epochs.
The optimal hyperparameter I try to find via GridSearchCV from Scikit-learn. I have often read that GridSearchCV can be used in combination with early stopping, but I can not find a sample code in which this is demonstrated.
With EarlyStopping I would try to find the optimal number of epochs, but I don't know how I can combine EarlyStopping with GridSearchCV or at least with cross validation.
Can anyone give me a hint on how to do that, it would be a great help?
My current code looks like this:
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)