Tieni traccia dei tuoi esperimenti con Hydra

Traccia esperimenti con Hydra

(Immagine di Autore)

Configura gli iperparametri utilizzando file YAML e accelera la tua ricerca!

Introduzione

Nello stesso modo in cui è impossibile scrivere del codice che non contenga errori al primo tentativo, è impossibile addestrare un modello che sia quello giusto al primo tentativo.

Coloro che hanno esperienza in Machine Learning e Deep Learning sanno che spesso devi dedicare molto tempo alla scelta dei giusti iperparametri dei modelli. Questi iperparametri sono ad esempio il tasso di apprendimento, la dimensione del batch e il numero di classi in output, ma questi sono solo alcuni dei più comuni, un progetto può avere centinaia di tali parametri.

Modificando gli iperparametri potremmo ottenere risultati diversi (migliori o peggiori), e a un certo punto tenere traccia di tutti i test effettuati diventa molto difficile.

Ecco cosa facevo per molto tempo: annotavo manualmente tutti questi iperparametri in un foglio Excel e scrivevo accanto ad essi il risultato di ogni esperimento, ad esempio il valore della perdita. In seguito ho “evoluto” e ho iniziato a scrivere file di configurazione per gli iperparametri, in cui inserivo valori diversi che volevo testare. Usavo scrivere funzioni personalizzate in Python che leggevano quei valori e li inserivano nella funzione di addestramento. Un file YAML è essenzialmente un file costruito in modo gerarchico in cui è possibile inserire chiavi e valori come nell’esempio seguente:

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

In seguito ho scoperto Hydra, un framework open-source che ha reso tutto questo processo più facile e ancora più veloce.

Cominciamo!

Supponiamo di stiamo sviluppando un semplice progetto di Machine Learning utilizzando PyTorch. Come al solito, creiamo una classe per il dataset, istanziamo i dataloader, creiamo il modello e addestriamolo. In questo esempio, utilizzerò PyTorch Lightning per organizzare meglio il codice, in cui abbiamo un oggetto Trainer, simile a quello che si fa in Keras. Se sei abituato a PyTorch, capirai anche Lightning in poco tempo.