Что означает global_step в Tensorflow?
В этом учебном коде с сайта TensorFlow,
-
global_step
кто-нибудь помочь объяснить, что означает global_step
?
На веб-сайте Tensorflow я обнаружил, что глобальный шаг - это подсчет шагов обучения, но я не совсем понимаю, что именно это означает.
-
Кроме того, что означает число 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?
Ответы
Ответ 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)