tensorflow队列操作中线程的目的是什么?

时间:2018-02-10 14:06:14

标签: python multithreading tensorflow queue python-multithreading

images, labels = tf.train.batch([image, label], batch_size=32, num_threads=4)

我经常看到用num_threads创建的队列,并且据说这些线程用于入队操作。我不太了解为入队设置多个线程的目的,因为我看到它的方式,排队只是在队列的末尾放置一个值。

1 个答案:

答案 0 :(得分:1)

来自Threading and Queues tutorial

  

例如,典型的输入架构是使用a   RandomShuffleQueue为培训模型准备投入:

     
      
  • 多个线程准备培训示例并将其推入队列。
  •   
  • 训练线程执行使小批量队列出局的训练操作   从队列中。
  •   
     

TensorFlow Session对象是多线程的,因此有多个线程   可以轻松使用相同的会话并并行运行操作。

这个想法是数据管道通常是I / O密集型的:数据可以从磁盘中获取,甚至可以从网络流式传输。 GPU 很可能不是计算中的瓶颈,仅仅是因为数据没有足够快地输入以使其饱和。

在多个线程中读取解决了这个问题:当一个线程正在等待I / O任务时,另一个线程已经有一些GPU的数据。处理此数据时,希望第一个线程接收并准备其批处理,依此类推。这就是tf.train.batchtf.train.shuffle_batch和其他函数支持多线程数据处理的原因。设置num_threads = 1会使批处理确定,但如果有多个线程,则无法保证队列中的数据顺序。