TensorFlow01:文件读取

文件读取流程:构造文件名队列--->读取与解码--->批处理

 构造文件名队列:

需要读取文件的文件名放入文件名队列:
tf.train.string_input_producer(string_tensor,shuffle=True)
string_tensor:含有文件名+路径的一阶张量
num_epochs:过几篇数据,默认无限过数据
return 文件队列

读取与解码:

从队列中读取内容,并进行解码操作,阅读器默认每次只读取一个样本
读取文件内容:文本文件默认一次读取一行,图片一张,二进制一次指定字节数
tf.TextLinerReader:读取文本文件逗号分隔值(csv格式),默认按行读取,返回阅读器实例
tf.WholeFileReader:用于读取图片文件,返回阅读器实例
tf.FixedLengthRecordReader(record_bytes):二进制文件
tf.TFRecordReader:读取TFRecords文件
它们共同读取方法:reader.read(file_queue),并且都会返回一个Tensors元组(key,value);key文件名字,value一个样本
默认只会读取一个样本,tf.train.batch或tf.tain.shuffle_batch进行批处理操作。
内容解码:
tf.decode_csv:解码文本文件内容
tf.image.decode_jpeg(contents):将jpeg编码的图像解码为unint8,形状[h,w,channels]
tf.image.decode_png(contenst):将png编码的图像解码为unint8,形状[h,w,channels]
tf.decode_raw():解码二进制文件内容与tf.FixedLengthRecordReader搭配使用,读取unit8类型
如果之后需要转换指定类型则可以使用tf.cast()进行相应转换

批处理:

解码后,可以直接获取默认一个样本内容,要获得多个样本,需要加如到新的队列进行批处理
tf.train.batch(tensor,batch_size,num_threads=1,capacity=32,name=None)  #tf.train.shuffle+batch
     tensors:可以张量的列表,批处理的内容放到列表当中
batch_size:从队列中读取的批处理大小
num_threads:进入队列的线程数
capcity:整数,队列中原属的最大数量
return:tensors

线程操作:

tf.train.QueueRunner()   #创建队列队形
tf.train.start_queue_runners(sess=None,coord=None) # 启动他的运行队列操作的线程
tf.train.Coordinator()   # 线程协调员,对线程进行管理和协调
request_stop():请求停止
should_stop():询问是否结束
join(threads=None,stop_grace_period_secs=120):回收线程

 

读取数据准备:

单个图片:[h,w,channel]       多个图片:[batch,h,w,channel]
图片的大小需要一致:tf.image.resize_images(images,size) #[batch,h,w,c],new_h,new_w
构造文件名队列---读取二进制数据闭关进行解码---处理图片形状即数据类型,批处理---开启会话线程运行
tf.transpose(depth_major,[1,2,0]).eval()    # [c,h,w]  转换 [h,w,c]

从队列中读取内容,并进行解码操作,阅读器默认每次只读取一个样本

读取文件内容:文本文件默认一次读取一行,图片一张,二进制一次指定字节数

tf.TextLinerReader:读取文本文件逗号分隔值(csv格式),默认按行读取,返回阅读器实例

tf.WholeFileReader:用于读取图片文件,返回阅读器实例

tf.FixedLengthRecordReader(record_bytes):二进制文件

tf.TFRecordReader:读取TFRecords文件

它们共同读取方法:reader.read(file_queue),并且都会返回一个Tensors元组(key,value);key文件名字,value一个样本

默认只会读取一个样本,tf.train.batchtf.tain.shuffle_batch进行批处理操作。

内容解码

tf.decode_csv:解码文本文件内容

tf.image.decode_jpeg(contents):jpeg编码的图像解码为unint8,形状[h,w,channels]

tf.image.decode_png(contenst):将png编码的图像解码为unint8,形状[h,w,channels]

tf.decode_raw():解码二进制文件内容与tf.FixedLengthRecordReader搭配使用,读取unit8类型

如果之后需要转换指定类型则可以使用tf.cast()进行相应转换

猜你喜欢

转载自www.cnblogs.com/jumpkin1122/p/11521029.html