Що означає global_step у Tensorflow?


88

У цьому навчальному коді веб-сайту TensorFlow,

  1. хтось може допомогти пояснити, що це global_stepозначає?

    Я знайшов на веб-сайті Tensorflow, що написано, що використовується загальний крок, підраховуючи навчальні кроки , але я не зовсім розумію, що саме це означає.

  2. Крім того, що означає цифра 0 під час налаштування 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

Відповідно до документа Tensorflow global_step: збільшення на одиницю після оновлення змінних . Чи означає це, що після одного оновлення global_stepстає 1?

Відповіді:


109

global_stepвідноситься до кількості партій, побачених на графіку. Щоразу, коли надається партія, ваги оновлюються у напрямку, що мінімізує втрати. global_stepпросто відстежує кількість побачених досі партій. Коли вона передається у списку minimize()аргументів, змінна збільшується на одиницю. Погляньте optimizer.minimize().

Ви можете отримати global_stepзначення за допомогою tf.train.global_step(). Також зручні корисні методи tf.train.get_global_stepабо tf.train.get_or_create_global_step.

0 є початковим значенням глобального кроку в цьому контексті.


Дякую! На засланні наданої вами tf.train.global_step(), то global_step_tensorвстановлено рівним 10. Чи означає це , 10 партій вже видно на графіку?
GabrielChu

9
@martianwars, я все ще не розумію, що маю global_step. Чи не цикл для пакетів, керований самою програмою python, тому програма python може легко знати, скільки партій було зроблено. Навіщо турбуватися про те, щоб підтримувати такий лічильник?
victorx

1
оптимізатори змінюються, це константи на основі глобального кроку @xwk
martianwars

23
щоб відповісти на питання xwk, я думаю, якщо ви припините тренування після 100 ітерацій, а наступного дня відновите модель і запустите ще 100 ітерацій. Зараз ваш глобальний крок - 200, але другий запуск має локальний номер ітерації від 1 до 100, який є локальним для цього пробігу, проти загального кроку ітерації. Отже, глобальний крок реєструє загальну кількість ітерацій, можливо, використовується для зміни швидкості навчання або іншого гіперпараметра.
Вей Лю

6
спираючись на відповідь Вей Лю, глобальні кроки також корисні для відстеження прогресу розподілених завдань TensorFlow. Оскільки працівники одночасно бачать партії, повинен існувати механізм відстеження загальної кількості побачених партій. Так працює, наприклад, StopAtStepHook .
Мало Маррек

4

покажемо вам яскравий зразок нижче:

код:

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

відповідний друк

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

global_step VariableМістить загальну кількість кроків в процесі навчання через завдання (кожен індекс кроку буде відбуватися тільки на одній меті).

Графік, створений програмою, global_stepдопомагає нам зрозуміти, де ми знаходимось у загальній схемі, з кожного завдання окремо. Наприклад, втрати та точність можна global_stepнанести на Tensorboard.


1

Є мережі, наприклад, GAN, які можуть потребувати двох (або більше) різних кроків. Навчання GAN із специфікацією WGAN вимагає, щоб кроки на дискримінаторі (або критиці) D були більшими, ніж кроки, зроблені на генераторі G. У цьому випадку корисно оголошувати різні змінні global_steps.

Приклад: ( G_lossі D_lossє втратою генератора та дискримінатора)

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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.