Ajuste de hiperparámetros

Introducción al Deep Learning con Keras

Miguel Esteban

Data Scientist & Founder

Hiperparámetros de redes neuronales

  • Número de capas
  • Número de neuronas por capa
  • Orden de las capas
  • Activaciones de las capas
  • Tamaños de lote
  • Tasas de aprendizaje
  • Optimizadores
  • ...
Introducción al Deep Learning con Keras

Resumen de Sklearn

# Import RandomizedSearchCV
from sklearn.model_selection import RandomizedSearchCV

# Instancia tu clasificador tree = DecisionTreeClassifier()
# Define una serie de parámetros a explorar params = {'max_depth':[3,None], "max_features":range(1,4), 'min_samples_leaf': range(1,4)}
# Realiza una búsqueda aleatoria con validación cruzada tree_cv = RandomizedSearchCV(tree, params, cv=5)
tree_cv.fit(X,y) # Imprime los mejores parámetros print(tree_cv.best_params_)
{'min_samples_leaf': 1, 'max_features': 3, 'max_depth': 3}
Introducción al Deep Learning con Keras

Convertir un modelo de Keras en un estimador de Sklearn

# Función que crea nuestro modelo de 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 el contenedor de sklearn desde keras from tensorflow.keras.wrappers.scikit_learn import KerasClassifier
# Crea un modelo como estimador de sklearn model = KerasClassifier(build_fn=create_model, epochs=6, batch_size=16)
Introducción al Deep Learning con Keras

Validación cruzada

# Import cross_val_score
from sklearn.model_selection import cross_val_score

# Comprueba cómo rinde tu modelo de Keras con validación cruzada de 5 pliegues
kfold = cross_val_score(model, X, y, cv=5)


# Imprime la precisión media por pliegue kfold.mean()
0.913333
# Imprime la desviación estándar por pliegue
kfold.std()
0.110754

Introducción al Deep Learning con Keras

Consejos para ajustar hiperparámetros en redes neuronales

  • La búsqueda aleatoria se prefiere frente a la búsqueda en cuadrícula
  • No uses muchas épocas
  • Usa una muestra más pequeña de tu conjunto de datos
  • Prueba con tamaños de lote, activaciones, optimizadores y tasas de aprendizaje
Introducción al Deep Learning con Keras

Búsqueda aleatoria en modelos de Keras

# Define una serie de parámetros
params = dict(optimizer=['sgd', 'adam'], epochs=3, 
              batch_size=[5, 10, 20], activation=['relu','tanh'])

# Crea un objeto de búsqueda aleatoria con CV y ajústalo a los datos random_search = RandomizedSearchCV(model, params_dist=params, cv=3)
random_search_results = random_search.fit(X, y)
# Imprime los resultados 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'}
Introducción al Deep Learning con Keras

Ajustar otros hiperparámetros

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

# Añade tantas capas ocultas como indique nl for i in range(nl): # Las capas tienen nn neuronas model.add(Dense(nn, activation='relu')) # Termina de definir y compilar tu modelo...
Introducción al Deep Learning con Keras

Ajustar otros hiperparámetros

# Define parámetros, con los mismos nombres que en create_model()
params = dict(nl=[1, 2, 9], nn=[128,256,1000])

# Repite la búsqueda aleatoria...

# Imprime los resultados...
Best: 0.87 using {'nl': 2,'nn': 128}
Introducción al Deep Learning con Keras

¡Vamos a ajustar redes!

Introducción al Deep Learning con Keras

Preparing Video For Download...