Mantén un registro de tus experimentos con Hydra

Registra tus experimentos con Hydra

(Imagen del autor)

¡Configura hiperparámetros usando archivos YAML y acelera tu investigación!

Introducción

De la misma manera que es imposible escribir código que no contenga un error en el primer intento, es imposible entrenar un modelo que sea el correcto en el primer intento.

Aquellos que tienen algo de experiencia en Aprendizaje Automático y Aprendizaje Profundo saben que a menudo hay que dedicar mucho tiempo a elegir los hiperparámetros correctos de los modelos. Estos hiperparámetros son, por ejemplo, la tasa de aprendizaje, el tamaño del lote y el número de clases de salida, pero estos son solo algunos de los más comunes, un proyecto puede tener cientos de tales parámetros.

Al cambiar los hiperparámetros podríamos obtener diferentes resultados (mejores o peores), y en algún momento se vuelve muy difícil hacer un seguimiento de todas las pruebas realizadas.

Esto es lo que solía hacer durante mucho tiempo: solía escribir todos estos hiperparámetros a mano en una hoja de Excel y escribir al lado el resultado de cada experimento, por ejemplo, el valor de pérdida. Más tarde “evolucioné” y comencé a escribir archivos de configuración para los hiperparámetros, en los que ponía varios valores que quería probar. Solía escribir funciones personalizadas en Python que leerían esos valores y los colocarían en la función de entrenamiento. Un archivo YAML es básicamente un archivo construido de manera jerárquica donde puedes insertar claves y valores como los siguientes:

data:  path: "data/ESC-50"  sample_rate: 8000  train_folds: [1, 2, 3]  val_folds: [4]  test_folds: [5]  batch_size: 8model:  base_filters: 32  num_classes: 50  optim:    lr: 3e-4seed: 0trainer:  max_epochs: 10

Más tarde descubrí Hydra, un marco de trabajo de código abierto que hizo todo este proceso más fácil e incluso más rápido.

¡Empecemos!

Supongamos que estamos desarrollando un proyecto simple de Aprendizaje Automático usando PyTorch. Como de costumbre, creamos una clase para el conjunto de datos, instanciamos los dataloaders, creamos el modelo y entrenamos. En este ejemplo, usaré PyTorch Lightning para organizar mejor el código, en el que tenemos un objeto Trainer, similar a lo que haces en Keras. Si estás acostumbrado a PyTorch, también entenderás Lightning en poco tiempo.