O que significa global_step no Tensorflow?

88

Neste tutorial está o código do site TensorFlow,

  1. alguém poderia ajudar a explicar o que global_stepsignifica?

    Descobri no site do Tensorflow escrito que a etapa global é usada para contar as etapas de treinamento , mas não entendi exatamente o que isso significa.

  2. Além disso, o que significa o número 0 durante a configuração 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

De acordo com o documento do Tensorflow global_step: incremente em um depois que as variáveis ​​forem atualizadas . Isso significa que depois de uma atualização global_stepse torna 1?

GabrielChu
fonte

Respostas:

108

global_steprefere-se ao número de lotes visto pelo gráfico. Cada vez que um lote é fornecido, os pesos são atualizados na direção que minimiza a perda. global_stepapenas mantém o controle do número de lotes vistos até agora. Quando é passado na minimize()lista de argumentos, a variável é aumentada em um. Dê uma olhada em optimizer.minimize().

Você pode obter o global_stepvalor usando tf.train.global_step(). Também úteis são os métodos utilitários tf.train.get_global_stepou tf.train.get_or_create_global_step.

0 é o valor inicial da etapa global neste contexto.

guerra marciana
fonte
Obrigado! No link que você forneceu, tf.train.global_step()o global_step_tensoré definido como 10. Isso significa que 10 lotes já são vistos pelo gráfico?
GabrielChu
9
@martianwars, ainda não entendi o ponto de ter global_step. Não é o loop para lotes impulsionado pelo próprio programa python, então o programa python pode saber facilmente quantos lotes foram feitos. Por que se preocupar em ter o tensorflow para manter tal contador?
victorx de
1
otimizadores variam suas constantes com base na etapa global @xwk
martianwars
23
para responder à pergunta de xwk, acho que se você parar de treinar após 100 iterações e no dia seguinte restaurar o modelo e executar outras 100 iterações. Agora, sua etapa global é 200, mas a segunda execução tem um número de iteração local de 1 a 100, que é local para essa execução, em comparação com a etapa de iteração global. Portanto, a etapa global registra o número total de iterações, talvez usado para alterar a taxa de aprendizagem ou outro hiperparâmetro.
Wei Liu
6
para desenvolver a resposta de Wei Liu, as etapas globais também são úteis para rastrear o progresso de jobs distribuídos do TensorFlow. Como os workers veem os lotes simultaneamente, deve haver um mecanismo para rastrear o número total de lotes vistos. Esta é a maneira como StopAtStepHook opera, por exemplo.
Malo Marrec
4

mostramos um exemplo vívido abaixo:

código:

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

impressão correspondente

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
fonte
3

O global_step Variablecontém o número total de etapas durante o treinamento nas tarefas (cada índice de etapa ocorrerá apenas em uma única tarefa).

Uma linha do tempo criada por global_stepnos ajuda a entender onde estamos no grande esquema, de cada uma das tarefas separadamente. Por exemplo, a perda e a precisão podem ser comparadas global_stepno Tensorboard.

envy_intelligence
fonte
1

Existem redes, por exemplo, GANs, que podem precisar de duas (ou mais) etapas diferentes. Treinar um GANs com a especificação WGAN requer que os passos no discriminador (ou crítico) D sejam mais do que aqueles feitos no gerador G. Nesse caso, é útil declarar diferentes variáveis ​​globais_steps.

Exemplo: ( G_losse D_losssão a perda do gerador e do discriminador)

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
fonte