Подтвердить что ты не робот

Что означает global_step в Tensorflow?

В этом учебном коде с сайта TensorFlow,

  1. global_step кто-нибудь помочь объяснить, что означает 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 doc global_step: приращение на единицу после обновления переменных. Означает ли это, что после одного обновления global_step становится global_step 1?

4b9b3361

Ответ 1

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 является начальным значением глобального шага в этом контексте.

Ответ 2

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

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

Ответ 3

показать вам яркий образец ниже:

код:

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

Ответ 4

Есть ли способ использовать global_step в рамках global_step? Я пытался воспроизвести polynomial decay для learning rate в Keras, который реализован в рамках Tensorflow следующим образом.

def poly_decay(step, initial_value, decay_period_images_seen):
    """
    Decays a variable using a polynomial law.
    :param step: number of images seen by the network since the beginning of the training.
    :param initial_value: The initial value of the variable to decay..
    :param decay_period_images_seen: the decay period in terms of images seen by the network
    (1 epoch of 10 batches of 6 images each means that 1 epoch = 60 images seen).
    Thus this value must be a multiple of the number of batches
    :return: The decayed variable.
    """

    factor = 1.0 - (tf.cast(step, tf.float32) / float(decay_period_images_seen))
    lrate = initial_value * np.power(factor, 0.9)

    return lrate

Ответ 5

Есть сети, например 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)