【问题标题】:Batching of data in Distributed Tensorflow分布式 TensorFlow 中的数据批处理
【发布时间】:2017-11-22 01:53:06
【问题描述】:

我对 Tensorflow 很陌生,所以我的问题可能听起来很愚蠢,但我真的找不到合适的解释,所以在这里问。 我需要您的帮助来了解如何在图分布式 Tensorflow 程序中进行数据批处理或分布。

由于我们执行多个客户端,它们本质上具有相同的代码来获取下一批:

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

我不明白这将如何确保对非常工人的独特批次。对我来说,似乎相同的数据正在发送给所有工人。

在这个示例脚本中,我们在每次迭代时都读取 next_batch,并且由于我们正在运行两个带有 job_type=worker 的客户端,因此两个 worker 将看到相同的 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()

期待您的帮助。

【问题讨论】:

    标签: tensorflow distributed


    【解决方案1】:

    查看mnist.train.next_batchnext_batchin tensorflow.contrib.learn.python.learn.datasets.mnist)的代码,这是mnist.train.next_batch调用的函数: - 每个工作人员都有一个单独的DataSet 对象,用于生成数据。所以每个批次都会为每个工人独立生成。

    • 每个数据点在每个 epoch 中可能会在工作人员之间多次使用,但子集是随机获取的,因此这可能不是问题。尽管有些工人可能会看到相同的数据点,但批次本身是随机生成的

    【讨论】:

    • 非常感谢您的回复。是的,我明白你的观点,但我不认为它是数据并行性,最后我并没有真正看到通过分配我的工作量来获得收益。相反,如果我可以给他们不同的批次(保证不会在工人之间重复),我可以节省一些时间,从而获得一些好处。你同意还是我在这里遗漏了什么?
    猜你喜欢
    • 2017-01-22
    • 2018-10-30
    • 2018-03-20
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多