Ottimizzazione degli iperparametri

Introduzione al Deep Learning con Keras

Miguel Esteban

Data Scientist & Founder

Iperparametri delle reti neurali

  • Numero di layer
  • Numero di neuroni per layer
  • Ordine dei layer
  • Attivazioni dei layer
  • Dimensioni dei batch
  • Learning rate
  • Ottimizzatori
  • ...
Introduzione al Deep Learning con Keras

Ripasso su Sklearn

# Importa RandomizedSearchCV
from sklearn.model_selection import RandomizedSearchCV

# Istanzia il classificatore tree = DecisionTreeClassifier()
# Definisci una serie di parametri da esplorare params = {'max_depth':[3,None], "max_features":range(1,4), 'min_samples_leaf': range(1,4)}
# Esegui una ricerca casuale con cross-validation tree_cv = RandomizedSearchCV(tree, params, cv=5)
tree_cv.fit(X,y) # Stampa i parametri migliori print(tree_cv.best_params_)
{'min_samples_leaf': 1, 'max_features': 3, 'max_depth': 3}
Introduzione al Deep Learning con Keras

Trasforma un modello Keras in uno stimatore Sklearn

# Funzione che crea il modello 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

# Importa il wrapper sklearn da keras from tensorflow.keras.wrappers.scikit_learn import KerasClassifier
# Crea un modello come stimatore sklearn model = KerasClassifier(build_fn=create_model, epochs=6, batch_size=16)
Introduzione al Deep Learning con Keras

Cross-validation

# Importa cross_val_score
from sklearn.model_selection import cross_val_score

# Valuta il modello Keras con una 5-fold cross-validation
kfold = cross_val_score(model, X, y, cv=5)


# Media dell'accuratezza per fold kfold.mean()
0.913333
# Deviazione standard per fold
kfold.std()
0.110754

Introduzione al Deep Learning con Keras

Suggerimenti per l'ottimizzazione degli iperparametri nelle reti neurali

  • La random search è preferibile alla grid search
  • Non usare troppe epoch
  • Usa un campione più piccolo del tuo insieme di dati
  • Prova batch size, attivazioni, ottimizzatori e learning rate
Introduzione al Deep Learning con Keras

Random search su modelli Keras

# Definisci una serie di parametri
params = dict(optimizer=['sgd', 'adam'], epochs=3, 
              batch_size=[5, 10, 20], activation=['relu','tanh'])

# Crea un oggetto di random search con CV e adattalo ai dati random_search = RandomizedSearchCV(model, params_dist=params, cv=3)
random_search_results = random_search.fit(X, y)
# Stampa i risultati 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'}
Introduzione al Deep Learning con Keras

Ottimizzare altri iperparametri

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

# Aggiungi tanti layer nascosti quanti specificati in nl for i in range(nl): # I layer hanno nn neuroni model.add(Dense(nn, activation='relu')) # Completa la definizione e la compilazione del modello...
Introduzione al Deep Learning con Keras

Ottimizzare altri iperparametri

# Definisci i parametri, nominati come in create_model()
params = dict(nl=[1, 2, 9], nn=[128,256,1000])

# Ripeti la random search...

# Stampa i risultati...
Best: 0.87 using {'nl': 2,'nn': 128}
Introduzione al Deep Learning con Keras

Ottimizziamo alcune reti!

Introduzione al Deep Learning con Keras

Preparing Video For Download...