Was bedeutet global_step in Tensorflow?

88

In diesem Tutorial-Code von der TensorFlow-Website,

  1. könnte jemand helfen zu erklären, was global_stepbedeutet?

    Ich habe auf der Tensorflow-Website geschrieben, dass ein globaler Schritt verwendet wird, um Trainingsschritte zu zählen , aber ich verstehe nicht ganz, was genau das bedeutet.

  2. Was bedeutet die Zahl 0 beim Einrichten 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

Laut Tensorflow doc global_step: Inkrementieren um eins, nachdem die Variablen aktualisiert wurden . Bedeutet das, dass nach einem Update global_step1 wird?

GabrielChu
quelle

Antworten:

108

global_stepbezieht sich auf die Anzahl der Chargen, die in der Grafik angezeigt werden. Jedes Mal, wenn eine Charge bereitgestellt wird, werden die Gewichte in die Richtung aktualisiert, die den Verlust minimiert. global_stepVerfolgt nur die Anzahl der bisher gesehenen Chargen. Wenn es in der minimize()Argumentliste übergeben wird, wird die Variable um eins erhöht. Schau es dir an optimizer.minimize().

Sie können den global_stepWert mit erhalten tf.train.global_step(). Praktisch sind auch die Utility-Methoden tf.train.get_global_stepoder tf.train.get_or_create_global_step.

0 ist in diesem Zusammenhang der Anfangswert des globalen Schritts.

Martianwars
quelle
Vielen Dank! In der Link zur Verfügung gestellt, tf.train.global_step()die global_step_tensorauf 10. Does eingestellt , dass Mittel 10 Chargen sind bereits durch das Diagramm gesehen?
GabrielChu
9
@martianwars, ich verstehe immer noch nicht den Sinn von global_step. Wird die Schleife für Stapel nicht vom Python-Programm selbst gesteuert, sodass das Python-Programm leicht erkennen kann, wie viele Stapel erstellt wurden. Warum sollte man sich die Mühe machen, den Tensorfluss zu haben, um einen solchen Zähler aufrechtzuerhalten?
Victorx
1
Optimierer variiert seine Konstanten basierend auf dem globalen Schritt @xwk
Martianwars
23
Um die Frage von xwk zu beantworten, denke ich, wenn Sie das Training nach 100 Iterationen beenden und am nächsten Tag das Modell wiederherstellen und weitere 100 Iterationen ausführen. Jetzt ist Ihr globaler Schritt 200, aber der zweite Lauf hat eine lokale Iterationsnummer von 1 bis 100, die für diesen Lauf lokal ist, im Vergleich zum globalen Iterationsschritt. Der globale Schritt zeichnet also die Gesamtzahl der Iterationen auf, die möglicherweise zum Ändern der Lernrate oder eines anderen Hyperparameters verwendet werden.
Wei Liu
6
Um auf der Antwort von Wei Liu aufzubauen, sind globale Schritte auch nützlich, um den Fortschritt verteilter TensorFlow-Jobs zu verfolgen. Da die Mitarbeiter gleichzeitig Chargen sehen, muss es einen Mechanismus geben, mit dem die Gesamtzahl der gesehenen Chargen verfolgt werden kann. So funktioniert beispielsweise StopAtStepHook .
Malo Marrec
4

Zeigen Sie unten ein anschauliches Beispiel:

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

entsprechender Druck

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
quelle
3

Das global_step Variable enthält die Gesamtzahl der Schritte während des Trainings über die Aufgaben hinweg (jeder Schrittindex wird nur für eine einzelne Aufgabe ausgeführt).

Eine von erstellte Zeitleiste global_stephilft uns zu verstehen, wo wir uns im großen Schema befinden, und zwar anhand der einzelnen Aufgaben. Zum Beispiel könnte der Verlust und die Genauigkeit global_stepauf Tensorboard aufgetragen werden .

neid_intelligenz
quelle
1

Es gibt Netzwerke, z. B. GANs, für die möglicherweise zwei (oder mehr) verschiedene Schritte erforderlich sind. Das Trainieren eines GANs mit der WGAN-Spezifikation erfordert, dass die Schritte auf dem Diskriminator (oder Kritiker) D mehr sind als die auf dem Generator G. In diesem Fall ist es nützlich, verschiedene global_steps-Variablen zu deklarieren.

Beispiel: ( G_lossund D_losssind der Verlust des Generators und des Diskriminators)

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
quelle