10、数据读取(二)——队列管理器和协程协调器实现异步读取训练


分析: 当数据量很大时,入队操作从硬盘中读取数据,放入内存中,主线程需要等待入队操作完成,才能进行训练。会话里可以运行多个.线程,实现异步读取。

1、队列管理器 API

 (1) tf.train.QueueRunner(queue, enqueue_ ops=None) 

   创建一个QueueRunner
   ● queue: A Queue  定义的队列
   ● enqueue_ops:  添加线程的队列操作列表,[]*2,列表乘以2表示指定两个线程

 create_threads(sess, coord=None,start=False): 

   (2) 创建线程来运行给定会话的入队操作
     ①start:  布尔值,如果True启动线程;如果为False调用者必须调用start()启动线程,
     ②coord:  线程协调器,后面线程管理需要用到
     ③return:  线程的实例

  通过多线程实现异步,子线程从磁盘读取数据,放入队列,主线程可以直接从队列取数据,不用等子线程将数据全部放入队列主线称才能工作

  需求: 子线程: 异步存入样本 主线程: 读取样本

  1.定义一个队列,1000个元素

Q = tf.FIFOQueue(1000,tf.float32)




猜你喜欢

转载自www.cnblogs.com/pengzhonglian/p/11867626.html