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 相关文章推荐
用smtplib和email封装python发送邮件模块类分享
Feb 17 Python
Python中的MongoDB基本操作:连接、查询实例
Feb 13 Python
python利用不到一百行代码实现一个小siri
Mar 02 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
Python打印“菱形”星号代码方法
Feb 05 Python
Windows下python3.6.4安装教程
Jul 31 Python
Python线程下使用锁的技巧分享
Sep 13 Python
用 Python 制作地球仪的方法
Apr 24 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 Python
Python二元算术运算常用方法解析
Sep 15 Python
python性能测试工具locust的使用
Dec 28 Python
python基础之匿名函数详解
Apr 21 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字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
php获取当前时间的毫秒数的方法
2014/01/26 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
JS 密码强度验证(兼容IE,火狐,谷歌)
2010/03/15 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
2015/12/07 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
Python基于pillow判断图片完整性的方法
2016/09/18 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
python使用tornado实现登录和登出
2018/07/28 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
OpenCV 模板匹配
2019/07/10 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
如何Tkinter模块编写Python图形界面
2020/10/14 Python
Python下载的11种姿势(小结)
2020/11/18 Python
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
公务员职业生涯规划书范文  
2014/01/19 职场文书
幼师自我鉴定
2014/02/01 职场文书
预备党员政审材料
2014/02/04 职场文书
文秘个人求职信范文
2014/04/22 职场文书
幼儿评语大全
2014/04/30 职场文书
群众路线查摆问题整改措施
2014/10/10 职场文书
企业党建工作总结2015
2015/05/26 职场文书
学历证明样本
2015/06/16 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫