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的socket发送http(s)请求方法示例
May 07 Python
Python中的单继承与多继承实例分析
May 10 Python
Python实现的json文件读取及中文乱码显示问题解决方法
Aug 06 Python
用python实现刷点击率的示例代码
Feb 21 Python
Python实现的爬取百度贴吧图片功能完整示例
May 10 Python
关于numpy数组轴的使用详解
Dec 05 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
Dec 18 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
python实现遍历文件夹图片并重命名
Mar 23 Python
python Matplotlib数据可视化(1):简单入门
Sep 30 Python
python从ftp获取文件并下载到本地
Dec 05 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
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
5.PHP的其他功能
2006/10/09 PHP
php基础学习之变量的使用
2011/06/09 PHP
php数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
图片按比例缩放函数
2006/06/26 Javascript
JavaScript去除空格的几种方法
2006/10/03 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
jQuery实现简单的手风琴效果
2020/04/17 jQuery
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
从零学Python之入门(五)缩进和选择
2014/05/27 Python
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
在Python的Django框架中创建语言文件
2015/07/27 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
Django Rest framework之权限的实现示例
2018/12/17 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
Python实现LR1文法的完整实例代码
2020/10/25 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
如何高效率的查找一个月以内的数据
2012/04/15 面试题
大学生思想汇报范文
2013/12/31 职场文书
运动会入场词50字
2014/02/20 职场文书
学雷锋演讲稿
2014/03/04 职场文书
校园文明标语
2014/06/13 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
4S店销售内勤岗位职责
2015/04/13 职场文书
未婚证明格式
2015/06/15 职场文书
2016国培学习心得体会
2016/01/08 职场文书