SyncReplicasOptimizerを使用して、同期されたSGDによってモデルをトレーニングしようとしています。私はmnist_replicas.pyの例に従った。私は1 psと2人の労働者を使用しています。SyncReplicasOptimizerはワーカーを同期させませんか?
私は変数epoch
を加え、1によってそれを増加させるための操作(これは単に何が起こっているかを理解することである):
epoch = tf.Variable(0, name="epoch", trainable=False)
inc_epoch_op = tf.assign_add(epoch, 1)
その後、私は私の中で次の手順を実行チーフでセッションを作成した後トレーニングループ:
while True:
train_feed = # my train feed
_, step = sess.run([train_op, global_step], feed_dict=train_feed)
loss = sess.run(total_loss, feed_dict = train_feed)
if is_chief:
sess.run(inc_epoch_op)
print '## epoch ', epoch.eval(sess)
if epoch.eval(sess) > 4:
break
SyncReplicasOptimizerの私の理解hereは私のトレーニングループを実行するたびに、それは私の2人の労働者が自分のバックプロパゲーションを終了するために、待つ勾配を平均化し、目を適用することで説明したようにem。
だから私は、両方の労働者が、印刷することを期待しています:
## epoch 1
## epoch 2
## epoch 3
## epoch 4
## epoch 5
私のチーフワーカーの場合のどちらが、他の1枚の版画:
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 2
## epoch 3
## epoch 3
## epoch 4
## epoch 5
と実行の間のパターンが変化しています。
私は何かを誤解していますか?
また、他の労働者は、印刷後、さらに取得していないのに対し、チーフ作業員が終了していることが起こる:
## epoch 4
とループし続けます。チーフワーカーが終了し、変数epoch
が何らかの形で破損しているため、他のワーカーはそれを5
に増分してから停止することはありません。 これを避けるための考えはありますか?ヘルプ