我正在嘗試使用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
這是我的首席工人的情況,但對方一打印:
## 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
,然後永不停止。 任何想法,以避免這一點?
感謝您的幫助