Come Modificare il Tasso di Apprendimento di TensorFlow

Una libreria software open-source per intelligenza artificiale e apprendimento automatico è chiamata TensorFlow. Anche se può essere applicata a molte attività, l’allenamento e l’inferenza di reti neurali profonde ricevono particolare attenzione.

Google Brain, la divisione di ricerca sull’intelligenza artificiale dell’azienda, ha creato TensorFlow. Dall’uscita iniziale nel 2015, è cresciuta fino a posizionarsi tra le librerie di apprendimento automatico più utilizzate al mondo.

Python, C++ e Java sono solo alcune dei linguaggi di programmazione con cui TensorFlow è accessibile. Inoltre, funziona con diversi sistemi operativi, tra cui Linux, macOS, Windows, Android e iOS.

TensorFlow è uno strumento efficace per l’apprendimento automatico e l’intelligenza artificiale. Offre molte funzionalità ed è semplice da utilizzare. TensorFlow è un ottimo punto di partenza se sei interessato all’apprendimento automatico.

TensorFlow è una libreria flessibile che può essere applicata a molti tipi di attività, come:

  • Classificazione delle immagini
  • Elaborazione del linguaggio naturale
  • Riconoscimento vocale
  • Sistemi di raccomandazione
  • Robotica
  • Imaging medico
  • Previsioni finanziarie;

Il tasso di apprendimento in TensorFlow è un iperparametro che regola con quale frequenza i pesi del modello vengono modificati durante l’addestramento. Il numero ottimale varierà a seconda dei dettagli del problema risolto, dell’architettura del modello e delle dimensioni del dataset. Spesso viene scelto come un piccolo valore positivo, come 0,001 o 0,01, ma questo non è sempre il caso.

Come Cambiare il Tasso di Apprendimento di TensorFlow

Puoi modificare il tasso di apprendimento in TensorFlow utilizzando vari metodi e strategie. Ecco tre approcci tipici:

Assegnazione Manuale del Tasso di Apprendimento

Inserendo manualmente un nuovo valore nella variabile del tasso di apprendimento, è possibile cambiare il tasso di apprendimento nel modo più semplice possibile. Questo metodo specifica il tasso di apprendimento come una variabile TensorFlow o una variabile Python, e il suo valore viene aggiornato durante l’addestramento. Ad esempio:

Python

 

import tensorflow as tf

# Definire la variabile del tasso di apprendimento
learning_rate = tf.Variable(0.001, trainable=False)

# Durante l'addestramento, aggiornare il tasso di apprendimento secondo necessità
# Per esempio, impostare un nuovo tasso di apprendimento di 0,0001
tf.keras.backend.set_value(learning_rate, 0.0001)

Il codice sopra spiega come inserire manualmente un nuovo valore nella variabile del tasso di apprendimento di TensorFlow per modificare il tasso di apprendimento. I passaggi sono elencati di seguito:

Definire la variabile per il tasso di apprendimento:

Python

 

learning_rate = tf.Variable(0.001, trainable=False)

Questa riga crea una variabile TensorFlow chiamata tasso_di_apprendimento e la inizializza con un valore iniziale di 0,001. L’argomento trainable=False garantisce che la variabile del tasso di apprendimento non venga aggiornata durante l’addestramento.

Aggiornare il tasso di apprendimento secondo necessità:

Python

 

tf.keras.backend.set_value(learning_rate, 0.0001)

Nell’esempio seguente, la funzione set_value di tf.keras.backend viene utilizzata per aggiornare il valore della variabile del tasso di apprendimento. Il primo argomento è la variabile da aggiornare (learning_rate), e il secondo argomento è il nuovo valore del tasso di apprendimento (0.0001 in questo caso).

Puoi regolare quando e come il tasso di apprendimento cambia aggiornando manualmente la variabile del tasso di apprendimento durante l’allenamento. Puoi sperimentare con diverse impostazioni, modificare il tasso di apprendimento in base a circostanze specifiche o addirittura creare il tuo piano di tasso di apprendimento.

In questo metodo, hai il controllo completo sul tasso di apprendimento, ma devi modificarlo manualmente in base alle tue esigenze.

Programmazioni del Tasso di Apprendimento

Puoi modificare sistematicamente il tasso di apprendimento durante l’allenamento utilizzando le programmazioni del tasso di apprendimento. In TensorFlow sono disponibili diverse programmazioni del tasso di apprendimento integrate, tra cui:

tf.keras.optimizers.schedules.ExponentialDecay, tf.keras.optimizers.schedules.PiecewiseConstantDecay o tf.keras.optimizers.schedules.CosineDecay. Queste programmazioni modificano il ritmo di apprendimento secondo regole predeterminate. Ad esempio:

Python

 

import tensorflow as tf

# Definire una programmazione del tasso di apprendimento
learning_rate_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
    initial_learning_rate=0.001,
    decay_steps=10000,
    decay_rate=0.96
)

# Creare un ottimizzatore con la programmazione del tasso di apprendimento
optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate_schedule)

Il frammento di codice sopra dimostra come utilizzare la programmazione del tasso di apprendimento ExponentialDecay in TensorFlow. Ecco una spiegazione di cosa fa ciascun parametro:

  • initial_learning_rate: Il tasso di apprendimento iniziale all’inizio dell’allenamento.
  • `decay_steps`: Il numero di step dopo i quali il tasso di apprendimento decadrà.
  • `decay_rate`: Il tasso con cui il tasso di apprendimento decadrà. Ad esempio, se `decay_rate` è impostato su 0.96, il tasso di apprendimento verrà moltiplicato per 0.96 per ogni `decay_steps` step.

Per creare un ottimizzatore con la pianificazione del tasso di apprendimento, si dovrebbe passare l’oggetto `learning_rate_schedule` come parametro `learning_rate` all’ottimizzatore. Nel tuo codice, stai utilizzando l’ottimizzatore `Adam`, ma puoi anche usare questa pianificazione del tasso di apprendimento con altri ottimizzatori.

Utilizzando la pianificazione del tasso di apprendimento `ExponentialDecay`, il tasso di apprendimento decrescerà gradualmente nel tempo, permettendo al modello di convergere più efficacemente durante l’addestramento. Regola i valori di `initial_learning_rate`, `decay_steps` e `decay_rate` in base alle tue esigenze specifiche e alle caratteristiche dei tuoi dati di addestramento.

Questo metodo elimina la necessità di intervento manuale, regolando automaticamente il tasso di apprendimento in base al calendario definito.

Callbacks

TensorFlow offre anche un meccanismo di callback che ti permette di modificare dinamicamente il tasso di apprendimento in base a certe condizioni. Ad esempio, puoi utilizzare il callback `tf.keras.callbacks.LearningRateScheduler` per definire una pianificazione del tasso di apprendimento personalizzata o il callback `tf.keras.callbacks.ReduceLROnPlateau` per ridurre il tasso di apprendimento quando la perdita di validazione raggiunge un plateau. Ecco un esempio:

Python

 

import tensorflow as tf

# Definire una callback per modificare dinamicamente il tasso di apprendimento
lr_callback = tf.keras.callbacks.ReduceLROnPlateau(
    monitor='val_loss',
    factor=0.1,
    patience=5,
    min_lr=0.0001
)

# Durante l'addestramento del modello, passare la callback alla funzione fit()
model.fit(
    x_train, y_train,
    validation_data=(x_val, y_val),
    callbacks=[lr_callback]
)

Il frammento di codice sopra mostra come utilizzare la callback ReduceLROnPlateau per modificare dinamicamente il tasso di apprendimento durante l’addestramento del modello. Ecco una spiegazione di ciò che fa ogni parametro:

  • monitor: La metrica da monitorare. In questo caso, è impostato su val_loss,’ il che significa che la callback controllerà la perdita di validazione.
  • factor: Il fattore che porta a una diminuzione del tasso di apprendimento. Se la condizione fornita è soddisfatta, ad esempio, se il fattore è impostato su 0.1, il tasso di apprendimento verrà moltiplicato per 0.1.
  • patience: Il numero di epoche senza miglioramento, dopo il quale il tasso di apprendimento verrà ridotto. Se la perdita di validazione non migliora per il numero di epoche patience, il tasso di apprendimento verrà ridotto.
  • min_lr: Il valore minimo a cui il tasso di apprendimento può essere ridotto. Una volta che il tasso di apprendimento raggiunge questo valore minimo, non verrà ulteriormente ridotto.

Per utilizzare questa callback, la si dovrebbe passare come parametro alla funzione fit() durante l’addestramento del modello. Assicurati di sostituire x_train, y_train, x_val, e y_val con i tuoi dati effettivi di addestramento e validazione.

Python

 

model.fit(
    x_train, y_train,
    validation_data=(x_val, y_val),
    callbacks=[lr_callback]
)

Durante l’allenamento, il callback ReduceLROnPlateau monitora la perdita di validazione e, se non migliora per un numero di epoche pari a patience, ridurrà il tasso di apprendimento per il fattore specificato factor. Ciò consente un’adeguata regolazione del tasso di apprendimento in base al rendimento del modello durante l’allenamento.

Con i callback, hai maggiore libertà di modificare il tasso di apprendimento in risposta a circostanze o eventi particolari durante l’allenamento.

Questi sono alcuni modi tipici per modificare il tasso di apprendimento di TensorFlow. Il metodo che utilizzerai dipenderà dai requisiti e dai casi d’uso che hai.

Conclusione

La migliore pianificazione del tasso di apprendimento del tuo modello dipenderà dai dati e dall’architettura del modello. Puoi sperimentare con diverse pianificazioni per trovare quella che funziona meglio per il tuo modello.

Source:
https://dzone.com/articles/how-to-change-the-learning-rate-of-tensorflow