Con el generador de modelos definido podremos crear el tuner que iterará a través de la configuración expuesta.
Crearemos una instancia Hyperband (que será el objeto que iterará en las configuraciones), su primer parámetro será la función generador, luego la métrica objetivo (en este caso será val_accuracy para medir la precisión real del modelo), se configurará un máximo de 20 épocas, un factor de 3, un directorio de carga y un nombre de proyecto.
tuner = kt.Hyperband(
constructor_modelos,
objective = "val_accuracy",
max_epochs = 20,
factor = 3,
directory = "models/",
project_name = "platzi-tunner"
)
Con en tuner generado, podremos empezar nuestra búsqueda, entregaremos al método el dataset, las épocas máximas y los datos de validación, empezamos el entrenamiento y esperamos a que se complete. Guardaremos el mejor desempeño en la variable best_hps
tuner.search(train_generator, epochs = 20, validation_data = validation_generator)
best_hps = tuner.get_best_hyperparameters(num_trials = 1)[0]
Al completar la búsqueda obtendremos información de los resultados, el tiempo de ejecución variará pero en GPU ronda entre 30 y 40 minutos y en CPU más de 2 horas.
Trial 30 Complete [00h 02m 39s]
val_accuracy: 0.8392982482910156
Best val_accuracy So Far: 0.8863157629966736
Total elapsed time: 00h 31m 03s
Para obtener las mejores configuraciones haremos uso del método get. La mejor cantidad de neuronas fue 512 y el mejor learning rate fue de 0.001.
print(best_hps.get("units"))
#512
print(best_hps.get("learning_rate"))
#0.001