[PYTHON] Réglage des hyper paramètres avec Grid Search à l'aide de pipeline avec keras

Keras apprend les poids des variables, mais il existe également des paramètres fixes tels que le nombre de neurones bons, le nombre de couches nécessaires et la valeur optimale du taux d'apprentissage. Cette fois, je le passerai à GridSearch de scikit-learn pour régler ces paramètres. Dans cet exemple, il est écrit en supposant le cas de la classification avec des données telles que l'iris.

Préparation

En plus des bibliothèques nécessaires à la création du modèle, chargez les éléments suivants:

python


from sklearn.grid_search import GridSearchCV
from sklearn.pipeline import Pipeline

Fonctionnaliser la construction de modèles

Créez une fonction avec le paramètre que vous souhaitez modifier comme argument. Dans cet exemple, pour des raisons de simplicité, le nombre de neurones dans la deuxième couche et les couches suivantes est calculé comme la nième racine du nombre original de neurones.

python


def create_model(self, evMethod, neurons, layers, learn_rate):
	# Criate model
	model = Sequential()
	model.add(Dense(neurons, input_dim=self.column_length, kernel_initializer='normal', activation='relu'))
	for i in range(1, layers):
		model.add(Dense(int(numpy.ceil(numpy.power(neurons,1/i))), kernel_initializer='normal', activation='relu'))
	model.add(Dense(3, kernel_initializer='normal', activation='softmax'))
	# Compile model
	adam = optimizers.Adam(lr=learn_rate)
	model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['accuracy'])
	return model

Préparer un tableau à passer au modèle

Tout doit être passé dans un tableau.

python


batch_size = [1000,300,100]
epochs = [10, 50, 100]
neurons = [20, 30, 45]
learn_rate = [0.001, 0.005, 0.01, 0.07]
layers = [1,3,5]

Apprentissage

Passer le modèle au pipeline

Ajoutez le modèle créé en tant que «mlp» à l'estimateur. La valeur initiale n'est pas utilisée, elle est donc appropriée.

python


estimators = []
estimators.append(('mlp', KerasClassifier(build_fn=self.create_model, epochs=10, batch_size=200, verbose=1)))
pipeline = Pipeline(estimators)

Transmettre les paramètres au pipeline

python


param_grid = dict(mlp__neurons = neurons, mlp__batch_size = batch_size, mlp__epochs=epochs, mlp__learn_rate=learn_rate, mlp__layers=layers)

Grid Search est identique à l'utilisation normale

python


grid = GridSearchCV(estimator=pipeline, param_grid=param_grid)
grid_result = grid.fit(self.X, self.Y)

Montrez la meilleure combinaison

best_estimator_ vous indiquera les paramètres du meilleur modèle. La précision est également affichée.

python


clf = grid_result.best_estimator_
print(clf.get_params())
accuracy = clf.score(self.X, self.Y)
print("\nAccuracy: %.2f" % (accuracy))

Enregistrez le meilleur modèle

L'utilisation de GridSearch prend des dizaines de fois plus de temps d'apprentissage, il est donc également recommandé d'enregistrer le meilleur modèle. Veuillez noter que l'appel est spécial par rapport au cas de la construction d'un modèle normalement.

python


clf.steps[1][1].model.save('file to path')

De cette façon, vous pouvez régler d'autres variables telles que les fonctions d'activation, veuillez donc en profiter.

Postscript: version de recherche de grille aléatoire

Comme la mémoire était terminée pendant l'entraînement, je suis passé de GridSearch à Randomized GridSearch pour réduire le nombre d'essais. Cela fonctionne simplement en remplaçant le nom de la fonction. Si vous avez un grand nombre de combinaisons de paramètres, c'est plus réaliste pour l'exécution.

python


grid = RandomizedSearchCV(estimator=pipeline, param_distributions=param_grid, n_iter=30)

Recommended Posts

Réglage des hyper paramètres avec Grid Search à l'aide de pipeline avec keras
Hyper réglage des paramètres avec LightGBM Tuner
Réglage des paramètres Keras avec Keras Tuner
Automatisation de l'optimisation des paramètres avec Keras avec GridSearch CV
Réglage des paramètres avec GridSearchCV / RandomizedSearchCV lors de l'utilisation de VotingClassifier
Réglage des paramètres avec luigi
Tutoriel CIFAR-10 avec Keras
LSTM multivarié avec Keras
J'ai essayé la reconnaissance de caractères manuscrits des caractères runiques avec CNN en utilisant Keras