¿Qué significa global_step en Tensorflow?

88

En este es el código del tutorial del sitio web de TensorFlow,

  1. ¿Alguien podría ayudar a explicar lo que global_stepsignifica?

    Encontré en el sitio web de Tensorflow escrito que el paso global se usa para contar los pasos de entrenamiento , pero no entiendo qué significa exactamente.

  2. Además, ¿qué significa el número 0 al configurar 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

De acuerdo con el documento de Tensorflow global_step: se incrementa en uno después de que se hayan actualizado las variables . ¿Eso significa que después de una actualización se global_stepconvierte en 1?

GabrielChu
fuente

Respuestas:

110

global_stepse refiere al número de lotes que se ven en el gráfico. Cada vez que se proporciona un lote, los pesos se actualizan en la dirección que minimiza la pérdida. global_stepsolo realiza un seguimiento del número de lotes vistos hasta ahora. Cuando se pasa en la minimize()lista de argumentos, la variable aumenta en uno. Échale un vistazo optimizer.minimize().

Puede obtener el global_stepvalor usando tf.train.global_step(). También son útiles los métodos de utilidad tf.train.get_global_stepo tf.train.get_or_create_global_step.

0 es el valor inicial del paso global en este contexto.

marcianos
fuente
¡Gracias! En el enlace que proporcionó, tf.train.global_step()el global_step_tensorestá establecido en 10. ¿Eso significa que el gráfico ya ve 10 lotes?
GabrielChu
9
@martianwars, todavía no entiendo el punto de tener global_step. ¿No es el bucle de lotes impulsado por el programa Python en sí, por lo que el programa Python puede saber fácilmente cuántos lotes se han realizado? ¿Por qué molestarse en tener el tensorflow para mantener tal contador?
victorx
1
los optimizadores varían sus constantes basadas en el paso global @xwk
martianwars
24
para responder a la pregunta de xwk, creo que si dejas de entrenar después de 100 iteraciones y al día siguiente restauras el modelo y ejecutas otras 100 iteraciones. Ahora su paso global es 200, pero la segunda ejecución tiene un número de iteración local de 1 a 100, que es local para esa ejecución, en comparación con el paso de iteración global. Entonces, el paso global registra el número total de iteraciones, que puede usarse para cambiar la tasa de aprendizaje u otro hiperparámetro.
Wei Liu
6
Para aprovechar la respuesta de Wei Liu, los pasos globales también son útiles para rastrear el progreso de los trabajos distribuidos de TensorFlow. Como los trabajadores ven lotes al mismo tiempo, es necesario que exista un mecanismo para rastrear el número total de lotes vistos. Así funciona, por ejemplo, StopAtStepHook .
Malo Marrec
4

mostrarle una muestra vívida a continuación:

código:

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()))

impresión correspondiente

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
yichudu
fuente
3

El global_step Variablemantiene el número total de pasos durante el entrenamiento a través de las tareas (cada salto de índice sólo se producirá en una sola tarea).

Una línea de tiempo creada por global_stepnos ayuda a comprender dónde estamos en el gran esquema, de cada una de las tareas por separado. Por ejemplo, la pérdida y la precisión se pueden representar global_stepen Tensorboard.

envy_intelligence
fuente
1

Hay redes, por ejemplo, GAN, que pueden necesitar dos (o más) pasos diferentes. El entrenamiento de un GAN con la especificación WGAN requiere que los pasos en el discriminador (o crítico) D sean más que los que se realizan en el generador G. En ese caso, es útil declarar diferentes variables de pasos globales.

Ejemplo: ( G_lossy D_lossson la pérdida del generador y el discriminador)

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)
Luca Di Liello
fuente