Python tensorflow队列操作中线程的用途是什么?

Python tensorflow队列操作中线程的用途是什么?,python,multithreading,tensorflow,queue,python-multithreading,Python,Multithreading,Tensorflow,Queue,Python Multithreading,我经常看到使用num_threads创建的队列,这些线程被称为用于排队操作。我不太明白为enqueue设置多个线程的目的,因为在我看来,enqueue只是将一个值放在队列的末尾 来自: 例如,典型的输入体系结构是使用 RandomShuffleQueue为训练模型准备输入: 多个线程准备培训示例并将其推送到队列中 一个训练线程执行一个训练op,该op使小批量出列 从队列中 TensorFlow会话对象是多线程的,因此有多个线程 可以轻松使用相同的会话并并行运行ops 其思想是,数据管道通常是

我经常看到使用
num_threads
创建的队列,这些线程被称为用于排队操作。我不太明白为enqueue设置多个线程的目的,因为在我看来,enqueue只是将一个值放在队列的末尾

来自:

例如,典型的输入体系结构是使用
RandomShuffleQueue
为训练模型准备输入:

  • 多个线程准备培训示例并将其推送到队列中
  • 一个训练线程执行一个训练op,该op使小批量出列 从队列中
TensorFlow会话对象是多线程的,因此有多个线程 可以轻松使用相同的会话并并行运行ops

其思想是,数据管道通常是I/O密集型的:数据可以从磁盘获取,甚至可以从网络流式传输。GPU很可能不会成为计算的瓶颈,因为数据传输速度不够快,无法使其饱和


读取多个线程可以解决这个问题:当一个线程正在等待I/O任务时,另一个线程已经有了一些GPU的数据。当处理这些数据时,第一个线程希望接收并准备它的批处理,依此类推。这就是为什么
tf.train.batch
tf.train.shuffle\u batch
等功能支持多线程数据处理。设置
num\u threads=1
使批处理具有确定性,但如果有多个线程,则无法保证队列中数据的顺序。

我猜您是否想预处理数据。@MateenUlhaq感谢您的回复!你认为预处理可以通过none tensorflow函数完成吗?谢谢你的回复!我可以说,线程将处理数据预处理(例如从文件名到张量)。如果是这样,那么预处理过程必须完全在tensorflow框架中吗?(我可以使用opencv函数读取图像文件吗?)其思想是处理张量和tensorflow变换。但也可以应用非张量流函数。
images, labels = tf.train.batch([image, label], batch_size=32, num_threads=4)