【Tensorflow】文件IO操作

1.队列和线程

2.文件读取

2.1文件读取流程
  1. 构造一个队列
  2. 读取队列内容-read
  • csv文件-默认读取一行
  • 二进制文件-指定一个样本的bytes读取
  • 图片文件-一张一张的读取
  1. 对内容进行解码
  2. 批处理
    一次读取多个样本.主线程主要用来训练,子线程主要用来读取
    就是说我们设置一个阈值为50,只要主线程读取够50个样本,我们就拿去进行训练.
2.2.文件读取API
  1. 构造文件队列
Q=tf.train.string_input_producer(
    string_tensor,  # 含有文件名的一阶张量
    shuffle=True, # 将文件名字顺序打乱
)
  1. 构造文件阅读器
txtReader=tf.TextLineReader()  # 默认按行读取
fixeReader=tf.FixedLengthRecordReader(
    record_bytes=10,指定每次读取的字节数
)  # 读取二进制文件
imgReader=tf.TFRecordReader() # 读取图片文件

reader=tf.read_file(filename)  # 通用文件读取器
  1. 文件解码器
# 文本文件解码器
data,target=tf.decode_csv(
    records=value,  # 文件内容
    record_defaults,  # 设置默认值和文件中数据类型
)

# 二进制文件解码器
# 将字节转换为一个数字向量表示,字节为字符串类型的张量
# 通常和tf.FixedLengthRecordReader搭配使用读取二进制为utf-8格式
data,target=tf.decode_raw(
    bytes,  # 二进制文件内容
    out_type,  # 指定输出类型
)
  1. 线程
# 当前会话中开启线程,返回线程
threads=tf.train.start_queue_runners(
    sess=None,  # 会话名
    coord=None,  # 线程名
)
  1. 管道读端批处理
# 管道读端批处理
tf.train.batch(
    tensors, # 解码后的数据
    batch_size=10,  # 批处理的大小
    num_threads=3, # 线程数
    capacity=32,  # 队列中元素的最大数量
)
tf.train.shuffle_batch(
	tensors,batch_size,
	capacity,
	min_after_dequeue,
	num_threads=1,
) 
乱序读取指定大小(个数)的张量
min_after_dequeue:留下队列里的张量个数,能够保持随机打乱
2.3文件读取案例
import os
import tensorflow as tf
def csvreader(filelist):
    file_queue=tf.train.string_input_producer(string_tensor=filelist)# 创建文件管道
    txtReader=tf.TextLineReader() # 创建文件阅读器
    key,value=txtReader.read(file_queue) # 读取管道中的内容,默认只读取一个样本(key表示文件路径,value表示文件的内容)
    
    # 对管道中的内容进行解码
    example,label=tf.decode_csv(  
        records=value,
        record_defaults=[['None'],[0]],  # 指定样本的默认值并且指定样本的数据类型
    )
    
    # 对数据进行批量处理
    example_batch,label_batch=tf.train.batch(
        tensors=[example,label], # 解码后的数据
        batch_size=10,  # 批量处理的样本个数
        num_threads=1,  # 开启线程数
        capacity=20,  # 管道容量
    )
    return example_batch,label_batch
    
if __name__=='__main__':
    BASE='./data/'
    filename=os.listdir(BASE)
    filelist=[os.path.join(BASE,file) for file in filename]  # 文件列表
    example_batch,label_batche=csvreader(filelist)
    with tf.Session() as sess:
        coord=tf.train.Coordinator() # 创建线程对象
        threads=tf.train.start_queue_runners(sess,coord=coord)  # 在当前会话中开启线程
        ds,ls=sess.run([example_batch,label_batche])

        for i in range(len(ds)):
            print(ds[i],'===',ls[i])
                
        coord.request_stop() # 请求线程结束
        coord.join(threads)  # 结束线程

3.图像处理

3.1图像基本知识
  1. 图像数字化三要素
    长度,宽度,通道数:[height,width,channels]
3.2读取图像API
3.3TFRecords分析,存取
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值