tensorflow数据读取流程和tf.data的使用

读取数据流程

v2-4b4d155361e2123359df9ce58f692a7f_b.gif

该过程可以分为三步

  • 构造文件名队列

把文件名队列读取进来,并随即打乱shufflu,即从filename到Filename到FilenameQueeue阶段

file_queue=tf.train.string_input_producer(file_list)
  • 读取与解码

使用读取器从上一步拿到的文件名队列,从文件中读取数据,按照一个样本为单位读取的,图片,文本,的编码不同,使用的解码器不同。

	reader=tf.WholeFileReader()
    _,value=reader.read(file_queue)
    image_a=tf.image.decode_jpeg(value,channels=3)
    image=tf.image.resize_images(image_a,[iamge_size,image_size])
    image=tf.cast(image,tf.float32)
    image=tf.reshape(image,shape=[iamge_size,image_size,channel])
  • 批处理阶段

构建批次即batch_size

inputs=tf.train.batch([image],batch_size=22,num_threads,capacity)
  • tf.data高级API的使用

self.tfrecordFile是解析tfrecord的路径,
dataset = tf.data.TFRecordDataset(filenames = self.TfrecordFile)
num_parallel_calls 参数的最优值取决于你的硬件,训练数据的特点(比如:它的 size、shape),map 函数的计算量 和 CPU 上同时进行的其它处理。一个简单的原则是:将 num_parallel_calls 设置为 CPU 的核心数。例如,如果 CPU 有四个核,将 num_parallel_calls 设置为 4 将会很高效。另一方面,设置 num_parallel_calls 大于 CPU 的核心数,能够导致低效的调度,导致输入管道速度下降
dataset = dataset.map(self.parser, num_parallel_calls = 10)
将数据集打乱,并构建batch_size
dataset = dataset.repeat().shuffle(9000).batch(batch_size).prefetch(batch_size)
iterator = dataset .make_one_shot_iterator()
get_next()方法使数据集不断的向神经网络中送
iamge,label= iterator.get_next()

这样就不用使用tf.placeholder()占位符了,直接将image送到神经网络中就能实现训练优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值