Python Data Science Program
📓 Abrir notebook en GitHub

Clase 105 — Keras Tuner (+ Optuna, Ray Tune)

Parte: 2 — Deep Learning · Fuente: Géron, cap. 10 § Fine-Tuning Neural Network Hyperparameters + docs Keras Tuner / Optuna / Ray Tune. ⏱️ Duración estimada: 85 min.

🎯 Objetivo

Hacer hyperparameter tuning sistemático en redes neuronales — buscar n_layers, units, lr, dropout, etc. con estrategias modernas: Random Search, Hyperband y Bayesian Optimization. Conocer las tres herramientas estándar de Python — Keras Tuner (TF-native, simple), Optuna (multi-framework, default industrial) y Ray Tune (distribuido, escalable a clusters).

📚 Resultados de aprendizaje

Al finalizar, el estudiante podrá:

🗺️ Temas

📌 Versión profundizada — 2026

El tema moderno que vivía como complemento dentro de esta clase ahora tiene clase propia dedicada con patrón completo, ejercicios y homework:

📖 Definiciones y características

📂 Dataset / recursos

🧪 Ejercicios

  1. Keras Tuner — RandomSearch: tunear units{32, 64, 128} y lr[1e-4, 1e-2] log con 20 trials. Reportar mejores hiperparámetros y val_accuracy.
  2. Keras Tuner — Hyperband: el mismo espacio, 50 trials con Hyperband. Comparar tiempo total vs RandomSearch.
  3. Optuna: traducir el espacio a Optuna; correr 50 trials con HyperbandPruner; graficar plot_optimization_history y plot_param_importances.
  4. Multi-objective: optimizar simultáneamente val_accuracy (max) y n_params (min) con optuna.create_study(directions=['maximize', 'minimize']). Inspeccionar la Pareto front.
  5. Visualización: con Optuna, generar plot_parallel_coordinate(study) y entender qué dimensiones son las más sensibles.

📝 Homework verificable

Tunear un MLP sobre Fashion-MNIST con Optuna:

  1. Espacio: n_layers ∈ [1, 4], units ∈ {32, 64, 128, 256}, dropout ∈ [0, 0.5], lr ∈ [1e-5, 1e-2] log, optimizer ∈ {Adam, SGD}.
  2. 100 trials con HyperbandPruner, n_jobs=2.
  3. Reportar best_params, best_value, y guardar el modelo final entrenado con esos params.
  4. Generar los 3 plots de visualización.

Criterio de aceptación: val_accuracy del mejor modelo ≥ 0.89; plot_param_importances debe mostrar lr y/o units como las más importantes (típico).

⚠️ Errores comunes

Síntoma / mensaje Causa y cómo arreglar
LR muestreado uniforme entre 1e-5 y 1e-2 y nunca encuentra el óptimo LR debe ser log-uniform. Fix: trial.suggest_float('lr', 1e-5, 1e-2, log=True).
Bayesian optimization parece random Necesita >10-20 trials para que el modelo interno aprenda. Con <20 trials, Random es competitivo.
Hyperband poda trials demasiado pronto factor muy alto o max_epochs muy bajo. Fix: ajustar factor=3, max_epochs=30.
optuna se cuelga al usar n_jobs > 1 con Keras TF tiene problemas con multi-threading. Fix: usar n_jobs=1, o lanzar procesos separados con storage compartido (SQLite/Postgres).
Reportar el resultado del mejor trial del set de val Eso es el resultado de búsqueda, no de evaluación. Fix: tener un test set separado e intacto para reportar el resultado final del mejor modelo.

❓ Preguntas frecuentes

❓ ¿Cuántos trials?

Mínimo 20–50 para Random / Hyperband. Bayesian se beneficia de más (100+). Si cada trial cuesta 1h → 100 trials = ~4 días en 1 GPU; con Ray Tune en 4 GPUs, ~1 día.

❓ ¿Tuning del LR primero o del resto?

LR primero, siempre. Es de lejos el hiperparámetro más sensible. Después arquitectura, después regularización.

❓ ¿Optuna o Keras Tuner para alguien que recién empieza?

Keras Tuner para entender la idea (más simple). Optuna apenas el problema es serio. La transición es rápida.

❓ ¿Cómo guardo el resultado del estudio Optuna?

optuna.create_study(study_name='exp1', storage='sqlite:///optuna.db', load_if_exists=True). Persistencia gratis; podés agregar trials después.

❓ ¿Ray Tune en una sola máquina vale la pena?

Sí si tenés ≥ 4 cores o ≥ 2 GPUs. Optuna n_jobs también paraleliza pero Ray maneja mejor recursos heterogéneos y crashes.

🔗 Referencias

📥 Material descargable

➡️ Siguiente clase

Clase 106 — Ray Tune: HPO distribuido y a escala