文件读取流程
多线程 + 队列
第一阶段:构造文件名队列
第二阶段:读取与解码
第三阶段:批处理
手动开启线程
1、构建文件名队列
将需要读取的文件的文件名放入文件名队列
tf.train.string_ input_ .producer(string_tensor,shuffle=True)
string_tensor:含文件名+路径的一阶张量
num_epochs:读几遍数据,默认无限过数据
return 文件队列
2、读取与解码
1)读取文件内容
阅读器默认每次只读取一个样本(文本文件默认一次读取一行 图片一张 二进制文件一次读取 指定字节数 TFRecords默认一次读取一个example)
tf.TextLineReader:
阅读文本文件逗号分隔值(CSV) 格式,默认按行读取
return: 读取器实例
tf.WholeFileReader: 用于读取图片文件
return: 读取器实例
tf.FixedL engthRecordReader(record_ bytes): 二进制文件
要读取每个记录是固定数量字节的二进制文件
record_ bytes: 整型,指定每次读取(一个样本)的字节数
return: 读取器实例
tf.TFRecordReader: 读取TFRecords文件
return: 读取器实例
共同读取方法:read(file_queue),并且都会返回一个Tensors元组
每次默认读取一个样本,批处理使用 tf.train.batch 或 tf.train.shuffle_batch
2)解码
读取不同类型文件,进行相对应解码
解码阶段。默认所有解码成tf.unit8类型,如果转换tf.cast()
tf.decode_ csv:解码文本文件内容
tf.image.decode_ jpeg(contents)
将JPEG编码的图像解码为uint8张量
return:uint8张量,3-D形状[height, width, channels]
tf.image.decode_ png(contents)
将PNG编码的图像解码为uint8张量
return:张量 类型,3-D形状[height, width, channels]
tf.decode_ raw: 解码二进制文件内容
与t.FixedLengthRecordReader搭配使用, 二进制读取为uint8类型
3、批处理
tf.train.batch(tensors, batch_ size, num_ threads = 1, capacity = 32,name=None)
读取指定大小(个数)的张量
tensors: 可以是包含张量的列表,批处理的内容放到列表当中
batch_ size:从队列中读取的批处理大小
num_ threads: 进入队列的线程数
capacity: 整数,队列中元素的最大数量
return:tensors
tf.train.shuffle_ batch
4、线程操作
手动开启线程 tf.train.QueueRunner()
开启会话
tf.train.start queue_ runners(sess=None, coord=None)
收集图中所有的队列线程,默认同时启动线程
sess: 所在的会话.
coord: 线程协调器
return: 返回所有线程
tf.train.Coordinator()
线程协调员,对线程进行管理和协调
request_ stop0: 请求停止
should_ stop(: 询问是否结束
join(threads=None, stop_ grace_ period_ secs=120): 回收线程
return: 线程协调员实例