Tensorflow에서 global_step은 무엇을 의미합니까?


88

이것은 TensorFlow 웹 사이트의 튜토리얼 코드 입니다.

  1. 아무도 무슨 global_step뜻 인지 설명 할 수 있습니까?

    Tensorflow 웹 사이트에서 global step is used count training steps 라고 썼지 만 정확히 무엇을 의미하는지는 모르겠습니다.

  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 : increment by one after the variables have been updated . 하나의 업데이트 global_step가 1이 된 후 의미합니까 ?

답변:


110

global_step그래프에 표시되는 배치 수를 나타냅니다. 배치가 제공 될 때마다 손실을 최소화하는 방향으로 가중치가 업데이트됩니다. global_step지금까지 본 배치 수만 추적합니다. minimize()인수 목록에 전달되면 변수가 1 씩 증가합니다. 를보세요 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을 갖는 요점을 얻지 못합니다. 파이썬 프로그램 자체에 의해 구동되는 배치에 대한 루핑이 아니므로 파이썬 프로그램은 얼마나 많은 배치가 수행되었는지 쉽게 알 수 있습니다. 그러한 카운터를 유지하기 위해 tensorflow가 왜 귀찮은가요?
victorx

1
최적화는 글로벌 단계 @xwk에 따라 그것의 상수를 varys
martianwars에게

24
xwk의 질문에 답하기 위해 100 회 반복 후에 훈련을 중단하고 다음날 모델을 복원하고 100 회 반복을 더 실행하면됩니다. 이제 전역 단계는 200이지만 두 번째 실행에는 전역 반복 단계와 비교하여 해당 실행에 대해 로컬 인 1에서 100까지의 로컬 반복 번호가 있습니다. 따라서 글로벌 단계는 총 반복 횟수를 기록하며 학습률이나 기타 하이퍼 파라미터를 변경하는 데 사용할 수 있습니다.
Wei Liu

6
Wei Liu의 답변을 바탕으로 글로벌 단계는 분산 된 TensorFlow 작업의 진행 상황을 추적하는데도 유용합니다. 작업자가 동시에 배치를 볼 때 표시되는 총 배치 수를 추적하는 메커니즘이 필요합니다. 예를 들어 StopAtStepHook이 작동 하는 방식 입니다.
Malo Marrec

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_stepTensorboard 에 대해 플롯 될 수 있습니다 .


1

두 개 (또는 그 이상)의 다른 단계가 필요할 수있는 GAN과 같은 네트워크가 있습니다. WGAN 사양으로 GAN을 훈련하려면 판별 자 (또는 비평가) 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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.