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 相关文章推荐
linux 下实现python多版本安装实践
Nov 18 Python
使用Python编写一个最基础的代码解释器的要点解析
Jul 12 Python
Python引用传值概念与用法实例小结
Oct 07 Python
Sanic框架请求与响应实例分析
Jul 16 Python
Pandas之MultiIndex对象的示例详解
Jun 25 Python
python在OpenCV里实现投影变换效果
Aug 30 Python
Python循环实现n的全排列功能
Sep 16 Python
python实现代码统计程序
Sep 19 Python
Django User 模块之 AbstractUser 扩展详解
Mar 11 Python
Python 将 QQ 好友头像生成祝福语的实现代码
May 03 Python
浅析Python requests 模块
Oct 09 Python
解决numpy和torch数据类型转化的问题
May 23 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 error_log 函数的使用
2009/04/13 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
JS中type="button"和type="submit"的区别
2017/07/04 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
2017/10/20 jQuery
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
[44:58]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第二场
2018/04/06 DOTA
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
python socket 超时设置 errno 10054
2014/07/01 Python
Python中datetime模块参考手册
2017/01/13 Python
Python计算斗牛游戏概率算法实例分析
2017/09/26 Python
python中partial()基础用法说明
2018/12/30 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
python实现统计代码行数的小工具
2019/09/19 Python
python中栈的原理及实现方法示例
2019/11/27 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
伦敦剧院门票:From The Box Office
2018/06/30 全球购物
生物制药专业自我鉴定
2014/02/19 职场文书
令人印象深刻的自荐信
2014/05/25 职场文书
知识就是力量演讲稿
2014/09/13 职场文书
给老师的感谢信
2015/01/20 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL
Python实现制作销售数据可视化看板详解
2021/11/27 Python
javascript之Object.assign()的痛点分析
2022/03/03 Javascript