Что означает 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?

ГабриэльЧу
источник

Ответы:

110

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
24
Чтобы ответить на вопрос 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.

envy_intelligence
источник
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)
Лука Ди Лиелло
источник