Qual è la differenza tra passaggi ed epoche in TensorFlow?


125

Nella maggior parte dei modelli, è presente un parametro passaggi che indica il numero di passaggi da eseguire sui dati . Ma ancora vedo nell'uso più pratico, eseguiamo anche la funzione di adattamento N epoche .

Qual è la differenza tra l'esecuzione di 1000 passaggi con 1 epoca e l'esecuzione di 100 passaggi con 10 epoche? Qual è il migliore in pratica? Qualche cambiamento di logica tra epoche consecutive? Dati mescolati?


1
Jason Brownlee su machinelearningmastery.com ha una risposta molto carina e dettagliata esattamente a questa domanda.
BmyGuest

Risposte:


84

Un'epoca di solito significa un'iterazione su tutti i dati di addestramento. Ad esempio, se hai 20.000 immagini e una dimensione batch di 100, l'epoca dovrebbe contenere 20.000 / 100 = 200 passaggi. Tuttavia, di solito imposto solo un numero fisso di passaggi come 1000 per epoca anche se ho un set di dati molto più grande. Alla fine dell'epoca controllo il costo medio e se è migliorato salvo un checkpoint. Non c'è differenza tra i passaggi da un'epoca all'altra. Li tratto solo come posti di blocco.

Le persone spesso spostano il set di dati tra le epoche. Preferisco usare la funzione random.sample per scegliere i dati da elaborare nelle mie epoche. Quindi supponiamo di voler eseguire 1000 passaggi con una dimensione batch di 32. Prenderò a caso 32.000 campioni dal pool di dati di addestramento.


47
La seconda parte della tua risposta è sbagliata, secondo me. Un'epoca è definita come un ciclo attraverso i dati di addestramento. Non è un'epoca, se fissi il numero di passaggi. Analogamente, non puoi chiamarlo epoca, se assaggi l'esempio di allenamento indipendentemente in ogni passaggio. Puoi salvare il tuo checkpoint ed eseguire controlli ogni N Step, ma questo non significa che N Step diventi un'epoca. Eviterei di chiamare questa epoca nel codice, ha il potenziale per confondere.
MarvMind

84

Una fase di allenamento è un aggiornamento gradiente. In un passaggio batch_size vengono elaborati molti esempi.

Un'epoca consiste in un ciclo completo attraverso i dati di addestramento. Di solito si tratta di molti passaggi. Ad esempio, se si dispone di 2.000 immagini e si utilizza una dimensione batch di 10, un'epoca consiste di 2.000 immagini / (10 immagini / passo) = 200 passi.

Se scegli la nostra immagine di allenamento in modo casuale (e indipendente) in ogni fase, normalmente non la chiami epoca. [Qui è dove la mia risposta differisce dalla precedente. Vedi anche il mio commento.]


Ho apportato una modifica al calcolo dei 200 passi ma mi sono dimenticato di accedere, quindi se vuoi parlare con l '"utente sconosciuto" ... Sono qui
Chris Chiasson

16

Dato che sto attualmente sperimentando con l'API tf.estimator, vorrei aggiungere anche i miei risultati. Non so ancora se l'utilizzo dei parametri dei passaggi e delle epoche è coerente in tutto TensorFlow e quindi per ora mi sto riferendo solo a tf.estimator (in particolare tf.estimator.LinearRegressor).

Fasi formative definite da num_epochs: stepsnon esplicitamente definite

estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input =  tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input)

Commento: ho impostato num_epochs=1l'input di addestramento e la voce del documento per numpy_input_fnmi dice "num_epochs: Integer, numero di epoche su cui eseguire l'iterazione sui dati. If Noneverrà eseguito per sempre." . Con num_epochs=1nell'esempio di cui sopra la formazione corre esattamente x_train.size / batch_size volte / passi (nel mio caso questo è stato 175000 passi come x_trainaveva una dimensione di 700.000 e batch_sizeera 4).

Fasi di addestramento definite da num_epochs: stepsdefinite esplicitamente superiori al numero di fasi definite implicitamente danum_epochs=1

estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input =  tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input, steps=200000)

Commento: num_epochs=1nel mio caso significherebbe 175000 passaggi ( x_train.size / batch_size con x_train.size = 700.000 e batch_size = 4 ) e questo è esattamente il numero di passaggi estimator.trainanche se il parametro steps è stato impostato su 200.000 estimator.train(input_fn=train_input, steps=200000).

Fasi di formazione definite da steps

estimator = tf.estimator.LinearRegressor(feature_columns=ft_cols)
train_input =  tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True)
estimator.train(input_fn=train_input, steps=1000)

Commento: anche se ho impostato num_epochs=1quando si chiama, numpy_input_fnl'allenamento si interrompe dopo 1000 passaggi. Questo perché steps=1000in estimator.train(input_fn=train_input, steps=1000)sovrascrive il file num_epochs=1in tf.estimator.inputs.numpy_input_fn({'x':x_train},y_train,batch_size=4,num_epochs=1,shuffle=True).

Conclusione : qualunque siano i parametri num_epochsper tf.estimator.inputs.numpy_input_fne stepsper estimator.traindefinire, il limite inferiore determina il numero di passaggi che verranno eseguiti.


11

In parole semplici
Epoch: Epoch è considerato come il numero di un passaggio dell'intero set di dati
Passaggi: In tensorflow uno step è considerato come il numero di epoche moltiplicato per esempi diviso per la dimensione del batch

steps = (epoch * examples)/batch size
For instance
epoch = 100, examples = 1000 and batch_size = 1000
steps = 100

Umar, ottengo un risultato migliore usando la tua formula, ma mi chiedo solo perché tutti hanno una formula diversa? Come dicono tutti gli altri sopra, steps = (numero totale di immagini) / dimensione del batch.
Satyendra Sahani

@SatyendraSahani Ho ottenuto questa formula da uno degli istruttori del corso GCP offerto a coursera, forse questo è il caso che hai ottenuto risultati migliori.
Muhammad Umar Amanat

@ Umar, ma a volte il numero di campioni è enorme. Come nel nostro caso, abbiamo 99.000 campioni. Se scegliamo un batch di dimensione 8 ed epoche 20. il numero totale di step_size è (20 * 99000) / 8 = 247,500. Che è davvero un numero elevato. lì comincio a dubitare di questo metodo.
Satyendra Sahani

8

Epoca: un'epoca di addestramento rappresenta un uso completo di tutti i dati di allenamento per il calcolo e l'ottimizzazione dei gradienti (addestrare il modello).

Passaggio: una fase di addestramento significa utilizzare una dimensione batch di dati di addestramento per addestrare il modello.

Numero di fasi di addestramento per epoca: total_number_of_training_examples/ batch_size.

Numero totale di fasi di formazione: number_of_epochsx Number of training steps per epoch.


2

Dal momento che non ci sono ancora risposte accettate: per impostazione predefinita, un'epoca scorre su tutti i dati di allenamento. In questo caso hai n passaggi, con n = Training_lenght / batch_size.

Se i tuoi dati di allenamento sono troppo grandi, puoi decidere di limitare il numero di passaggi durante un'epoca. [ Https://www.tensorflow.org/tutorials/structured_data/time_series?_sm_byp=iVVF1rD6n2Q68VSN]

Quando il numero di passaggi raggiunge il limite che hai impostato, il processo ricomincerà dall'inizio dell'epoca successiva. Quando si lavora in TF, i dati vengono solitamente trasformati prima in un elenco di batch che verranno inviati al modello per l'addestramento. Ad ogni passaggio si elabora un batch.

Per quanto riguarda se è meglio impostare 1000 passaggi per 1 epoca o 100 passaggi con 10 epoche, non so se c'è una risposta diretta. Ma ecco i risultati sull'addestramento di una CNN con entrambi gli approcci utilizzando i tutorial sui dati della serie temporale di TensorFlow:

In questo caso, entrambi gli approcci portano a previsioni molto simili, differiscono solo i profili di formazione.

passi = 20 / epoche = 100 inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

passi = 200 / epoche = 10

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.