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的Treq on Twisted来进行HTTP压力测试
Apr 16 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
Apr 18 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
Apr 26 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
Mar 13 Python
PyTorch中常用的激活函数的方法示例
Aug 20 Python
Python字符编码转码之GBK,UTF8互转
Feb 09 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
May 26 Python
Python ckeditor富文本编辑器代码实例解析
Jun 22 Python
关于python的缩进规则的知识点详解
Jun 22 Python
Python colormap库的安装和使用详情
Oct 06 Python
python判断all函数输出结果是否为true的方法
Dec 03 Python
python基础学习之生成器与文件系统知识总结
May 25 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编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
PHP中捕获超时事件的方法实例
2015/02/12 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
js 获取和设置css3 属性值的实现方法
2013/05/06 Javascript
js使用心得分享
2015/01/13 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
2015/03/04 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
vue 实现用户登录方式的切换功能
2020/04/14 Javascript
利用Psyco提升Python运行速度
2014/12/24 Python
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
Python 正则表达式的高级用法
2016/12/04 Python
使用python实现接口的方法
2017/07/07 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
Python对接 xray 和微信实现自动告警
2019/09/17 Python
Python中os模块功能与用法详解
2020/02/26 Python
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
护理职业应聘自荐书
2013/09/29 职场文书
小学生美德少年事迹
2014/02/02 职场文书
小学生环保倡议书
2014/05/15 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
SpringCloud的JPA连接PostgreSql的教程
2021/06/26 Java/Android