KerasTuner: buscando la mejor configuración para tu modelo
Clase 17 de 28 • Curso Profesional de Redes Neuronales con TensorFlow
Resumen
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.
python
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
python
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.
```python 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.
```python print(best_hps.get("units")) 512
print(best_hps.get("learning_rate"))#0.001 ```
Creando un modelo a partir de la mejor configuración
Con los mejores hiperparámetros encontrados podremos construir un modelo optimizado, esto lo haremos con el método hypermodel.build de tuner que recibirá la configuración como argumento.
Ahora tenemos un modelo listo para ser entrenado, agregaremos el callback de early stopping para evitar sobre entrenamientos innecesarios.
```python hypermodel = tuner.hypermodel.build(best_hps)
history_hypermodel = hypermodel.fit( train_generator, epochs = 20, callbacks = [callback_early], validation_data = validation_generator ) ```
Al final obtendremos la mejor versión posible de nuestro modelo con respecto a la alta cantidad de configuraciones alternas que validamos automáticamente.
Contribución creada por Sebastián Franco Gómez.