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