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