2017-06-19 59 views
1

我對Tensorflow非常陌生,所以我的問題聽起來很愚蠢,但我無法真正找到正確的解釋,所以在此處詢問。 我需要你的幫助,以瞭解在分佈式Tensorflow程序中如何進行數據的批處理或分配。在分佈式Tensorflow中批量處理數據

由於我們執行多個客戶端,基本具有相同的代碼,以獲得下一批:

batch_xs, batch_ys = mnist.train.next_batch(FLAGS.batch_size) 

我不明白怎麼會變成這樣確保唯一一批非常工人。對我來說,好像將相同的數據發送給所有工作人員一樣。

在這裏,對我們閱讀next_batch因爲我們正在運行的兩個客戶JOB_TYPE =工人每次迭代這個示例腳本,無論是工人會看到相同的next_batch代碼。在這種情況下,請幫助我理解數據並行性如何工作。

with sv.prepare_or_wait_for_session(server.target, config=sess_config) as sess: 
     print("Worker %d: Session initialization complete." % FLAGS.task_index) 
     # Loop until the supervisor shuts down or 1000000 steps have completed. 
     step = 0 
     while not sv.should_stop() and step < 1000000: 
      # Run a training step asynchronously. 
      batch_xs, batch_ys = mnist.train.next_batch(FLAGS.batch_size) 
      print("FETCHING NEXT BATCH %d" % FLAGS.batch_size) 
      train_feed = {x: batch_xs, y_: batch_ys} 

      _, step = sess.run([train_op, global_step], feed_dict=train_feed) 
      if step % 100 == 0: 
       print("Done step %d" % step) 

    # Ask for all the services to stop. 
    sv.stop() 

期待您的幫助。

回答

1

綜觀mnist.train.next_batchnext_batchin tensorflow.contrib.learn.python.learn.datasets.mnist)的代碼,其是受mnist.train.next_batch調用的函數: - 每個工人將具有將被用於生成數據的單獨DataSet對象。因此每個批次將爲每個工作人員獨立生成。

  • 每個數據點可能會在不同數據點之間跨越多個工作點使用多次,但子集是隨機採用的,因此這可能不是問題。儘管一些工人可能會看到相同的數據點,批次本身是隨機生成的
+1

非常感謝你的回覆。是的,我明白你的意思,但我不認爲這是數據並行,它結束時,我真的沒有看到通過分配我的工作負載的增益。相反,如果我可以給不同批次它們(這是保證跨工人不重複),我可以節省一些時間,因此一些好處。你同意還是我在這裏錯過了一些東西? – Gladiator