tensorflow框架——数据IO操作(一)

数据IO操作:

三种文件读取方法:

一、通用文件读取流程(图片、二进制数据、TFRecords)

二、占位符&feed_dict搭配使用

三、QueueRunner(多线程+队列)

这里讲第三种,以读取图片为例

   文件读取流程:           

  • 构造文件名队列 
    file_queue=tf.train.string.input_producer(string_tensor,shufile=True)
  • 读取与解码
    tf.TextLineReader() //文本读取
    tf.decode_csv()   //解码
    
    tf.WholeFileReader()//读取图片
    tf.image.decode_jpg(contents) //解码
    tf.image.decode_png(contents)
    
    tf.FixedLengthRecordReader(record_bytes)//读取二进制文件
    tf.decode_raw()
    
    tf.TFRecordReader //读取TFRecords文件

    key,value=读取器.read(file_queue) 其中key文件名,value一个样本

  • 批处理队列
    tf.train.batch(tensor,batch_size,num_threads=1,capacity=32,name=None)

        手动开启线程 

tf.train.QueueRunner()

        开启会话:

tf.train.start_queue_runners(sess=None,coord=None)

图片数据

特征抽取:

文本-数值(二维数组shape(n_samples,m_features))

字典-数值(二维数组shape(n_samples,m_features))

图片-数值(三维数组shape(图片长度、宽度、通道数))

组成图片最基本的单位是像素

图片三要素:

        灰度图【长、宽、1】 每个像素点【0,255】的数

        彩色图【长,宽,3】每个像素点用3个【0,255】的数

张量形状:

        Tensor(指令名称,shape,dtype)

        一张图片 shape=(height,width,channels)

        多张图片 shape=(batch,height,width,channels)

缩放图片到统一大小:

        tf.image.resize_images(image,size)

数据格式:

        存储:uint8(节约空间)

        矩阵运算:float32(提高精度)

案例:狗图片读取

1)构造文件名队列

2)读取与解码

        使样本的形状和类型统一

3)批处理

代码:

import tensorflow as tf
import  os
def picture_read(file_list):
    '''
    狗图片读取案例
    '''
    #1、构造文件名队列
    file_queue=tf.train.string_input_producer(file_list)
    # print(file_queue)
    #2、读取与解码
    #读取阶段
    reader=tf.WholeFileReader()
    #key文件名,value一张图片的原始编码形式
    key,value=reader.read(file_queue)
    print("key:\n",key)
    print("value:\n",value)
    #解码阶段
    image=tf.image.decode_jpeg(value)
    print("image:\n",image)

    #图像的形状、类型修改
    image_resized=tf.image.resize_images(image,[200,200])

    #静态形状的修改
    image_resized.set_shape(shape=[200,200,3])
    print("image_resized:]n",image_resized)

    #3、批处理(未经过图像形状、类型修改,批处理会报错)
    image_batch=tf.train.batch([image_resized],batch_size=100,num_threads=1,capacity=100)
    print("image_batch:\n",image_batch)

    #开启会话(光开启会话会阻塞,需要开启线程)
    with tf.Session() as sess:
        #开启线程
        #线程协调员
        coord=tf.train.Coordinator()
        threads=tf.train.start_queue_runners(sess=sess,coord=coord)

        key_new,value_new,image_new,image_resized_new,image_batch_new=sess.run([key,value,image,image_resized,image_batch])
        print("key_new:\n",key_new)
        print("value_new:\n",value_new)
        print("image_new:\n",image_new)
        print('image_resized_new:\n',image_resized_new)
        print("image_batch_new:\n",image_batch_new)

        #回收线程
        coord.request_stop()
        coord.join(threads)

    return None

if __name__=="__main__":
    #构造路径+文件名列表
    filename=os.listdir("./dog")
    # print(filename)
    #拼接路径+文件名
    file_list=[os.path.join("./dog/",file) for file in filename]
    # print(file_list)
    picture_read(file_list)

图片数据链接:链接:https://pan.baidu.com/s/1w50KYjjVeR07v_g60fYJBg 
                            提取码:1vit

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值