【问题标题】:What is the purpose of thread in tensorflow queue operation?tensorflow队列操作中线程的目的是什么?
【发布时间】:2018-02-10 14:06:14
【问题描述】:
images, labels = tf.train.batch([image, label], batch_size=32, num_threads=4)

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

【问题讨论】:

  • 我猜你是否想对数据进行预处理。
  • @MateenUlhaq 感谢您的回复!你认为预处理可以通过非张量流函数来完成吗?

标签: python multithreading tensorflow queue python-multithreading


【解决方案1】:

来自Threading and Queues tutorial

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

  • 多个线程准备训练示例并将它们推入队列。
  • 一个训练线程执行一个训练操作,使小批量出队 从队列中。

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

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

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

【讨论】:

  • 感谢您的回复!我可以这么说吗,线程将处理数据预处理(例如从文件名到张量)。如果是这样,预处理程序必须完全在tensorflow框架中吗? (我可以使用opencv函数读取图像文件吗?)
  • 这个想法是处理 tensors 和张量流转换。但也可以应用非张量流函数。
猜你喜欢
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多