Cosa significa global_step in Tensorflow?


88

In questo è il codice tutorial dal sito Web di TensorFlow,

  1. qualcuno potrebbe aiutare a spiegare cosa global_stepsignifica?

    Ho trovato sul sito web di Tensorflow scritto che viene utilizzato il passo globale conteggio dei passaggi di formazione , ma non ho capito cosa significhi esattamente.

  2. Inoltre, cosa significa il numero 0 durante la configurazione global_step?

    def training(loss,learning_rate):
        tf.summary.scalar('loss',loss)
        optimizer = tf.train.GradientDescentOptimizer(learning_rate)
        
        # Why 0 as the first parameter of the global_step tf.Variable?
        global_step = tf.Variable(0, name='global_step',trainable=False)

        train_op = optimizer.minimize(loss, global_step=global_step)
    
        return train_op

Secondo il documento Tensorflow global_step: incrementa di uno dopo che le variabili sono state aggiornate . Significa che dopo che un aggiornamento global_stepdiventa 1?

Risposte:


110

global_stepsi riferisce al numero di lotti visti dal grafico. Ogni volta che viene fornito un batch, i pesi vengono aggiornati nella direzione che riduce al minimo la perdita. global_steptiene solo traccia del numero di lotti visti finora. Quando viene passato nell'elenco degli minimize()argomenti, la variabile viene aumentata di uno. Dai un'occhiata optimizer.minimize().

Puoi ottenere il global_stepvalore usando tf.train.global_step(). Sono anche utili i metodi di utilità tf.train.get_global_stepo tf.train.get_or_create_global_step.

0 è il valore iniziale del passaggio globale in questo contesto.


Grazie! Nel link che hai fornito, tf.train.global_step()il global_step_tensorè impostato a 10. Questo significa che 10 lotti sono già visti dal grafico?
GabrielChu

9
@martianwars, ancora non capisco il punto di avere global_step. Il ciclo per i batch non è guidato dal programma Python stesso, quindi il programma Python può sapere facilmente quanti batch sono stati eseguiti. Perché preoccuparsi di avere il tensorflow per mantenere un tale contatore?
victorx

1
ottimizzatori varys è costanti basate sul passo globale @xwk
guerre martian

24
per rispondere alla domanda di xwk, penso che se interrompi l'allenamento dopo 100 iterazioni e il giorno successivo ripristini il modello ed esegui altre 100 iterazioni. Ora il tuo passaggio globale è 200, ma la seconda esecuzione ha un numero di iterazione locale da 1 a 100, che è locale per quella corsa, rispetto al passaggio di iterazione globale. Quindi il passo globale registra il numero totale di iterazioni, forse usato per cambiare la velocità di apprendimento o altri iperparametri.
Wei Liu

6
per basarsi sulla risposta di Wei Liu, i passaggi globali sono utili anche per monitorare l'avanzamento dei lavori TensorFlow distribuiti. Poiché i lavoratori visualizzano contemporaneamente i batch, è necessario un meccanismo per tenere traccia del numero totale di batch visualizzati. Questo è il modo in cui StopAtStepHook funziona, ad esempio.
Malo Marrec

4

mostrarti un vivido esempio di seguito:

codice:

train_op = tf.train.GradientDescentOptimizer(learning_rate=LEARNING_RATE).minimize(loss_tensor,global_step=tf.train.create_global_step())
with tf.Session() as sess:
    ...
    tf.logging.log_every_n(tf.logging.INFO,"np.mean(loss_evl)= %f at step %d",100,np.mean(loss_evl),sess.run(tf.train.get_global_step()))

stampa corrispondente

INFO:tensorflow:np.mean(loss_evl)= 1.396970 at step 1
INFO:tensorflow:np.mean(loss_evl)= 1.221397 at step 101
INFO:tensorflow:np.mean(loss_evl)= 1.061688 at step 201

3

Il global_step Variablecontiene il numero totale di passaggi durante l'allenamento attraverso le attività (ogni indice di passaggio si verificherà solo su una singola attività).

Una sequenza temporale creata da global_stepci aiuta a capire a che punto siamo nel grande schema, da ciascuna delle attività separatamente. Ad esempio, la perdita e l'accuratezza potrebbero essere tracciate global_stepsu Tensorboard.


1

Esistono reti, ad esempio GAN, che potrebbero richiedere due (o più) passaggi diversi. L'addestramento di un GAN con la specifica WGAN richiede che i passaggi sul discriminatore (o critico) D siano maggiori di quelli eseguiti sul generatore G. In tal caso, è utile dichiarare variabili global_steps diverse.

Esempio: ( G_losse D_losssono la perdita del generatore e del discriminatore)

G_global_step = tf.Variable(0, name='G_global_step', trainable=False)
D_global_step = tf.Variable(0, name='D_global_step', trainable=False)

minimizer = tf.train.RMSPropOptimizer(learning_rate=0.00005)

G_solver = minimizer.minimize(G_loss, var_list=params, global_step=G_global_step)
D_solver = minimizer.minimize(D_loss, var_list=params, global_step=D_global_step)
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.