Co oznacza global_step w Tensorflow?

88

W tym jest kod samouczka ze strony internetowej TensorFlow,

  1. czy ktoś mógłby pomóc wyjaśnić, co to global_stepznaczy?

    Znalazłem na stronie Tensorflow napisane, że krok globalny jest używany do liczenia kroków treningowych , ale nie do końca rozumiem, co to dokładnie oznacza.

  2. Co oznacza cyfra 0 podczas konfiguracji 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

Zgodnie z dokumentem Tensorflow global_step: zwiększ o jeden po zaktualizowaniu zmiennych . Czy to oznacza, że ​​jedna aktualizacja global_stepzmieni się na 1?

GabrielChu
źródło

Odpowiedzi:

110

global_stepodnosi się do liczby partii widocznych na wykresie. Za każdym razem, gdy dostarczana jest partia, wagi są aktualizowane w kierunku, który minimalizuje straty. global_stepśledzi tylko liczbę wyświetlonych dotychczas partii. Kiedy jest przekazywana na minimize()liście argumentów, zmienna jest zwiększana o jeden. Spójrz na optimizer.minimize().

Możesz uzyskać global_stepwartość za pomocą tf.train.global_step(). Przydatne są również metody narzędziowe tf.train.get_global_steplub tf.train.get_or_create_global_step.

0 jest początkową wartością globalnego kroku w tym kontekście.

wojny marsjańskie
źródło
Dzięki! W podanym przez Ciebie łączu tf.train.global_step()wartość global_step_tensorwynosi 10. Czy to oznacza, że ​​na wykresie widać już 10 partii?
GabrielChu
9
@martianwars, nadal nie rozumiem sensu posiadania global_step. Czy pętla dla partii nie jest sterowana przez sam program w języku Python, więc program w Pythonie może łatwo wiedzieć, ile partii zostało zrobionych. Po co zawracać sobie głowę tensorflow do utrzymania takiego licznika?
victorx
1
optymalizatory zmieniają swoje stałe na podstawie globalnego kroku @xwk
martianwars
24
odpowiadając na pytanie xwk, myślę, że jeśli przestaniesz trenować po 100 iteracjach, a następnego dnia przywrócisz model i uruchomisz kolejne 100 iteracji. Teraz twój krok globalny to 200, ale drugi bieg ma lokalny numer iteracji od 1 do 100, który jest lokalny dla tego uruchomienia, w porównaniu z globalnym krokiem iteracji. Tak więc krok globalny rejestruje całkowitą liczbę iteracji, które mogą być użyte do zmiany szybkości uczenia się lub innego hiperparametru.
Wei Liu
6
Aby wykorzystać odpowiedź Wei Liu, kroki globalne są również przydatne do śledzenia postępu rozproszonych zadań TensorFlow. Ponieważ pracownicy jednocześnie widzą partie, musi istnieć mechanizm śledzenia całkowitej liczby widzianych partii. W ten sposób działa na przykład StopAtStepHook .
Malo Marrec
4

pokaż poniżej żywą próbkę:

kod:

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

odpowiedni nadruk

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
źródło
3

global_step VariablePosiada całkowitą liczbę kroków podczas treningu całej zadań (każdy indeks krokiem będzie występować tylko na jednym zadaniu).

Oś czasu utworzona przez global_steppomaga nam zrozumieć, gdzie jesteśmy w wielkim planie, z każdego zadania oddzielnie. Na przykład, straty i dokładność można przedstawić na wykresie global_stepna Tensorboard.

envy_intelligence
źródło
1

Istnieją sieci, np. GAN, które mogą wymagać dwóch (lub więcej) różnych kroków. Trenowanie sieci GAN ze specyfikacją WGAN wymaga, aby kroki na dyskryminatorze (lub krytycznym) D były większe niż te wykonywane na generatorze G. W takim przypadku warto zadeklarować różne zmienne global_steps.

Przykład: ( G_lossi D_losssą utratą generatora i dyskryminatora)

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
źródło