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 图片验证码代码
Dec 07 Python
Python中的一些陷阱与技巧小结
Jul 10 Python
使用paramiko远程执行命令、下发文件的实例
Oct 01 Python
python spyder中读取txt为图片的方法
Apr 27 Python
Pandas读取并修改excel的示例代码
Feb 17 Python
python使用matplotlib画柱状图、散点图
Mar 18 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 Python
Python叠加两幅栅格图像的实现方法
Jul 05 Python
下载官网python并安装的步骤详解
Oct 12 Python
Python 用turtle实现用正方形画圆的例子
Nov 21 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
python geopandas读取、创建shapefile文件的方法
Jun 29 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错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
laravel学习教程之关联模型
2016/07/30 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
jquery $.ajax入门应用一
2008/11/19 Javascript
window.location.hash 属性使用说明
2010/03/20 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
解决extjs grid 不随窗口大小自适应的改变问题
2014/01/26 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
2014/11/26 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
Vue精简版风格概述
2018/01/30 Javascript
Angular6新特性之Angular Material
2018/12/28 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
python中将阿拉伯数字转换成中文的实现代码
2011/05/19 Python
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
python 对字典按照value进行排序的方法
2019/05/09 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
中学家长会邀请函
2014/02/03 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
销售顾问工作计划书
2014/09/15 职场文书
2015年班级工作总结范文
2015/04/03 职场文书
2016年父亲节寄语
2015/12/04 职场文书