在TensorFlow-slim文档中,有一个ParallelReader对象,它可以通过让多个读取器将示例字符串放入队列来并行读取TFRecords数据。但是,如果我没有记错的话,tf.train.batch将示例从队列中出队,并且能够与参数num_threads并行执行。如果是这样的话,是否需要批量创建和读取数据的速度都必须相同,否则会导致批量创建速度变慢?
实际上,我不太确定出队操作是在tf.train.batch中发生的,还是在手动创建queue_runner将示例出队时发生的,因为我相信tf.train.batch可以有效地取代queue_runner操作。这是正确的吗?
发布于 2017-02-07 02:53:07
就你的第一段而言:答案是,输入管道中的每一步都应该有足够的带宽为模型提供支持(可能不会太多)。如果从一个队列移动到另一个队列很快,但是没有足够的数据馈送到第一个队列(例如,由于I/O问题),则很容易遇到瓶颈。您还可以想象有大量的并行读取器和大量的I/O带宽,但只有一个线程负责收集所有这些示例,这是瓶颈。一些粗略的计算可能会有所帮助,但最终您应该是monitoring the number of examples in each queue。
至于第二个问题,tf.train.batch does start its own queue runner。实际的入队/出队是异步发生的,这就是为什么监控队列大小很重要,以确保训练消耗数据的速度不会快于输入管道产生数据的速度。
https://stackoverflow.com/questions/42049256
复制相似问题