Tensorflow分批量读取数据教程


Posted in Python onFebruary 07, 2020

之前的博客里使用tf读取数据都是每次fetch一条记录,实际上大部分时候需要fetch到一个batch的小批量数据,在tf中这一操作的明显变化就是tensor的rank发生了变化,我目前使用的人脸数据集是灰度图像,因此大小是92*112的,所以最开始fetch拿到的图像数据集经过reshape之后就是一个rank为2的tensor,大小是92*112的(如果考虑通道,也可以reshape为rank为3的,即92*112*1)。如果加入batch,比如batch大小为5,那么拿到的tensor的rank就变成了3,大小为5*92*112。

下面规则化的写一下读取数据的一般流程,按照官网的实例,一般把读取数据拆分成两个大部分,一个是函数专门负责读取数据和解码数据,一个函数则负责生产batch。

import tensorflow as tf

def read_data(fileNameQue):

  reader = tf.TFRecordReader()
  key, value = reader.read(fileNameQue)
  features = tf.parse_single_example(value, features={'label': tf.FixedLenFeature([], tf.int64),
                            'img': tf.FixedLenFeature([], tf.string),})
  img = tf.decode_raw(features["img"], tf.uint8)
  img = tf.reshape(img, [92,112]) # 恢复图像原始大小
  label = tf.cast(features["label"], tf.int32)

  return img, label

def batch_input(filename, batchSize):

  fileNameQue = tf.train.string_input_producer([filename], shuffle=True)
  img, label = read_data(fileNameQue) # fetch图像和label
  min_after_dequeue = 1000
  capacity = min_after_dequeue+3*batchSize
  # 预取图像和label并随机打乱,组成batch,此时tensor rank发生了变化,多了一个batch大小的维度
  exampleBatch,labelBatch = tf.train.shuffle_batch([img, label],batch_size=batchSize, capacity=capacity,
                           min_after_dequeue=min_after_dequeue)
  return exampleBatch,labelBatch

if __name__ == "__main__":

  init = tf.initialize_all_variables()
  exampleBatch, labelBatch = batch_input("./data/faceTF.tfrecords", batchSize=10)

  with tf.Session() as sess:

    sess.run(init)
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord)

    for i in range(100):
      example, label = sess.run([exampleBatch, labelBatch])
      print(example.shape)

    coord.request_stop()
    coord.join(threads)

读取数据和解码数据与之前基本相同,针对不同格式数据集使用不同阅读器和解码器即可,后面是产生batch,核心是tf.train.shuffle_batch这个函数,它相当于一个蓄水池的功能,第一个参数代表蓄水池的入水口,也就是逐个读取到的记录,batch_size自然就是batch的大小了,capacity是蓄水池的容量,表示能容纳多少个样本,min_after_dequeue是指出队操作后还可以供随机采样出批量数据的样本池大小,显然,capacity要大于min_after_dequeue,官网推荐:min_after_dequeue + (num_threads + a small safety margin) * batch_size,还有一个参数就是num_threads,表示所用线程数目。

min_after_dequeue这个值越大,随机采样的效果越好,但是消耗的内存也越大。

以上这篇Tensorflow分批量读取数据教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python之eval()函数危险性浅析
Jul 03 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
Mar 13 Python
Python遍历目录并批量更换文件名和目录名的方法
Sep 19 Python
Windows下安装python MySQLdb遇到的问题及解决方法
Mar 16 Python
python 读写中文json的实例详解
Oct 29 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
Python爬虫基础之XPath语法与lxml库的用法详解
Sep 13 Python
Flask框架web开发之零基础入门
Dec 10 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
django的分页器Paginator 从django中导入类
Jul 25 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
python统计字符的个数代码实例
Feb 07 #Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
Feb 07 #Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
Feb 07 #Python
Python reshape的用法及多个二维数组合并为三维数组的实例
Feb 07 #Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
Feb 07 #Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 #Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 #Python
You might like
PHP命令Command模式用法实例分析
2018/08/08 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
JavaScript开发时的五个注意事项
2007/12/08 Javascript
JavaScript OOP面向对象介绍
2010/12/02 Javascript
HTML上传控件取消选择
2013/03/06 Javascript
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
javascript 数组操作详解
2015/01/29 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
2017/09/22 Javascript
Windows安装Node.js报错:2503、2502的解决方法
2017/10/25 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
[01:41]DOTA2 2015国际邀请赛中国区预选赛第三日战报
2015/05/28 DOTA
[00:31]DOTA2上海特级锦标赛 Fnatic战队宣传片
2016/03/04 DOTA
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
python append、extend与insert的区别
2016/10/13 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
在python中实现强制关闭线程的示例
2019/01/22 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
如何使用Python多线程测试并发漏洞
2019/12/18 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
Pythonic版二分查找实现过程原理解析
2020/08/11 Python
python 如何在测试中使用 Mock
2021/03/01 Python
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
放飞梦想演讲稿200字
2014/08/26 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
关爱空巢老人感想
2015/08/11 职场文书
2016党员党课心得体会
2016/01/07 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书