Optimisation des hyperparamètres

Introduction au Deep Learning avec Keras

Miguel Esteban

Data Scientist & Founder

Hyperparamètres des réseaux de neurones

  • Nombre de couches
  • Neurones par couche
  • Ordre des couches
  • Activations des couches
  • Tailles de lot
  • Taux d'apprentissage
  • Optimiseurs
  • ...
Introduction au Deep Learning avec Keras

Récap Sklearn

# Import RandomizedSearchCV
from sklearn.model_selection import RandomizedSearchCV

# Instancier votre classifieur tree = DecisionTreeClassifier()
# Définir une série de paramètres à explorer params = {'max_depth':[3,None], "max_features":range(1,4), 'min_samples_leaf': range(1,4)}
# Effectuer une recherche aléatoire avec validation croisée tree_cv = RandomizedSearchCV(tree, params, cv=5)
tree_cv.fit(X,y) # Afficher les meilleurs paramètres print(tree_cv.best_params_)
{'min_samples_leaf': 1, 'max_features': 3, 'max_depth': 3}
Introduction au Deep Learning avec Keras

Transformer un modèle Keras en estimateur Sklearn

# Fonction qui crée notre modèle Keras
def create_model(optimizer='adam', activation='relu'):
    model = Sequential()
    model.add(Dense(16, input_shape=(2,), activation=activation))
    model.add(Dense(1, activation='sigmoid'))
    model.compile(optimizer=optimizer, loss='binary_crossentropy')
    return model

# Importer le wrapper sklearn depuis keras from tensorflow.keras.wrappers.scikit_learn import KerasClassifier
# Créer un modèle au format estimateur sklearn model = KerasClassifier(build_fn=create_model, epochs=6, batch_size=16)
Introduction au Deep Learning avec Keras

Validation croisée

# Import cross_val_score
from sklearn.model_selection import cross_val_score

# Évaluer votre modèle keras avec une validation croisée en 5 plis
kfold = cross_val_score(model, X, y, cv=5)


# Afficher la précision moyenne par pli kfold.mean()
0.913333
# Afficher l'écart type par pli
kfold.std()
0.110754

Introduction au Deep Learning avec Keras

Astuces pour l'optimisation des hyperparamètres de réseaux de neurones

  • La recherche aléatoire est préférable à la recherche en grille
  • N'utilisez pas trop d'epochs
  • Utilisez un échantillon plus petit de votre jeu de données
  • Testez tailles de lot, activations, optimiseurs et taux d'apprentissage
Introduction au Deep Learning avec Keras

Recherche aléatoire sur des modèles Keras

# Définir une série de paramètres
params = dict(optimizer=['sgd', 'adam'], epochs=3, 
              batch_size=[5, 10, 20], activation=['relu','tanh'])

# Créer un objet de recherche aléatoire avec CV et l'ajuster aux données random_search = RandomizedSearchCV(model, params_dist=params, cv=3)
random_search_results = random_search.fit(X, y)
# Afficher les résultats print("Best: %f using %s".format(random_search_results.best_score_, random_search_results.best_params_))
Best: 0.94 using {'optimizer': 'adam', 'epochs': 3, 'batch_size': 10, 'activation': 'relu'}
Introduction au Deep Learning avec Keras

Ajuster d'autres hyperparamètres

def create_model(nl=1,nn=256):
    model = Sequential()
    model.add(Dense(16, input_shape=(2,), activation='relu'))

# Ajouter autant de couches cachées que spécifié dans nl for i in range(nl): # Les couches ont nn neurones model.add(Dense(nn, activation='relu')) # Finir de définir et compiler votre modèle...
Introduction au Deep Learning avec Keras

Ajuster d'autres hyperparamètres

# Définir des paramètres, nommés comme dans create_model()
params = dict(nl=[1, 2, 9], nn=[128,256,1000])

# Répéter la recherche aléatoire...

# Afficher les résultats...
Best: 0.87 using {'nl': 2,'nn': 128}
Introduction au Deep Learning avec Keras

Optimisons quelques réseaux !

Introduction au Deep Learning avec Keras

Preparing Video For Download...