Que signifie global_step dans Tensorflow?

88

Dans ce code de didacticiel du site Web TensorFlow,

  1. quelqu'un pourrait-il aider à expliquer ce que cela global_stepsignifie?

    J'ai trouvé sur le site Web de Tensorflow écrit que l'étape globale est utilisée pour compter les étapes de formation , mais je ne comprends pas tout à fait ce que cela signifie exactement.

  2. Aussi, que signifie le chiffre 0 lors de la configuration 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

Selon la documentation Tensorflow global_step: incrémenter de un après la mise à jour des variables . Cela signifie-t-il qu'une mise à jour global_stepdevient 1?

GabrielChu
la source

Réponses:

108

global_stepfait référence au nombre de lots vus par le graphique. Chaque fois qu'un lot est fourni, les poids sont mis à jour dans le sens qui minimise la perte. global_stepgarde juste une trace du nombre de lots vus jusqu'à présent. Lorsqu'elle est passée dans la minimize()liste d'arguments, la variable est augmentée de un. Jetez un oeil à optimizer.minimize().

Vous pouvez obtenir la global_stepvaleur en utilisant tf.train.global_step(). Les méthodes utilitaires tf.train.get_global_stepou tf.train.get_or_create_global_step.

0 est la valeur initiale de l'étape globale dans ce contexte.

guerres martiennes
la source
Merci! Dans le lien que vous avez fourni, tf.train.global_step()l' global_step_tensorest à 10. Est -ce que cela veut dire 10 lots sont déjà vus par le graphique?
GabrielChu
9
@martianwars, je ne comprends toujours pas l'intérêt d'avoir global_step. La boucle pour les lots n'est-elle pas gérée par le programme python lui-même, de sorte que le programme python peut facilement savoir combien de lots ont été effectués. Pourquoi se donner la peine d'avoir le tensorflow pour maintenir un tel compteur?
victorx
1
les optimiseurs varient ses constantes en fonction de l'étape globale @xwk
martianwars
23
pour répondre à la question de xwk, je pense que si vous arrêtez l'entraînement après 100 itérations, et le lendemain, restaurez le modèle et exécutez 100 itérations supplémentaires. Maintenant, votre étape globale est 200, mais la deuxième exécution a un numéro d'itération locale de 1 à 100, qui est local pour cette exécution, par rapport à l'étape d'itération globale. Ainsi, le pas global enregistre le nombre total d'itérations, peut-être utilisé pour modifier le taux d'apprentissage ou un autre hyperparamètre.
Wei Liu
6
Pour s'appuyer sur la réponse de Wei Liu, les étapes globales sont également utiles pour suivre la progression des travaux TensorFlow distribués. Comme les travailleurs voient simultanément les lots, il doit y avoir un mécanisme pour suivre le nombre total de lots vus. C'est ainsi que fonctionne StopAtStepHook par exemple.
Malo Marrec
4

vous montrer un échantillon vivant ci-dessous:

code:

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

impression correspondante

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
la source
3

Le global_step Variablecontient le nombre total d'étapes pendant la formation sur les tâches (chaque index d'étape ne se produira que sur une seule tâche).

Une chronologie créée par global_stepnous aide à comprendre où nous en sommes dans le grand schéma, à partir de chacune des tâches séparément. Par exemple, la perte et la précision peuvent être global_stepcomparées sur Tensorboard.

envie_intelligence
la source
1

Il existe des réseaux, par exemple des GAN, qui peuvent nécessiter deux étapes différentes (ou plus). L'entraînement d'un GAN avec la spécification WGAN nécessite que les étapes sur le discriminateur (ou critique) D soient plus que celles effectuées sur le générateur G. Dans ce cas, il est utile de déclarer différentes variables global_steps.

Exemple: ( G_losset D_losssont la perte du générateur et du discriminateur)

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
la source