Tensorflowでglobal_stepはどういう意味ですか?


88

これはTensorFlowウェブサイトのチュートリアルコードです

  1. 誰かがglobal_step意味を説明するのを手伝ってもらえますか?

    TensorflowのWebサイトで、グローバルステップがトレーニングステップのカウントに使用されていることがわかりましたが、正確な意味がわかりません。

  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によると、変数が更新された後、1ずつインクリメントします。それは、1回の更新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 2016

9
@martianwars、私はまだglobal_stepを持つ意味がありません。Pythonプログラム自体によって駆動されるバッチのループではないので、Pythonプログラムは実行されたバッチの数を簡単に知ることができます。なぜそのようなカウンターを維持するためにテンソルフローをわざわざ持っているのですか?
victorx 2017

1
オプティマイザーは、グローバルステップ@xwkに基づいて定数を変化させます
martianwars

24
xwkの質問に答えるために、100回の反復後にトレーニングを停止し、翌日モデルを復元してさらに100回の反復を実行すると思います。これで、グローバルステップは200になりますが、2番目の実行のローカル反復番号は1から100で、グローバル反復ステップとは異なり、その実行に対してローカルです。したがって、グローバルステップは反復の総数を記録し、学習率やその他のハイパーパラメータの変更に使用される可能性があります。
Wei Liu

6
Wei Liuの回答に基づいて構築するために、グローバルステップは分散TensorFlowジョブの進行状況を追跡するのにも役立ちます。ワーカーはバッチを同時に表示するため、表示されたバッチの総数を追跡するメカニズムが必要です。これは、たとえばStopAtStepHookの動作方法です
マロマレック2017

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にプロットできます。


1

2つ(またはそれ以上)の異なるステップを必要とする可能性のあるネットワーク(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.