Tensorflow 实现分批量读取数据


Posted in Python onJanuary 04, 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设置windows桌面壁纸的实现代码
Jan 28 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
解决python3中解压zip文件是文件名乱码的问题
Mar 22 Python
Python-OpenCV基本操作方法详解
Apr 02 Python
TensorFlow实现简单卷积神经网络
May 24 Python
python字典setdefault方法和get方法使用实例
Dec 25 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 Python
python的pip有什么用
Jun 17 Python
Python通过递归函数输出嵌套列表元素
Oct 15 Python
python设置中文界面实例方法
Oct 27 Python
Ubuntu20下的Django安装的方法步骤
Jan 24 Python
matplotlib相关系统目录获取方式小结
Feb 03 Python
Tensorflow的常用矩阵生成方式
Jan 04 #Python
Tensorflow读取并输出已保存模型的权重数值方式
Jan 04 #Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 #Python
tensorflow 获取所有variable或tensor的name示例
Jan 04 #Python
tensorflow没有output结点,存储成pb文件的例子
Jan 04 #Python
TensorFlow查看输入节点和输出节点名称方式
Jan 04 #Python
根据tensor的名字获取变量的值方式
Jan 04 #Python
You might like
php绘图中显示不出图片的原因及解决
2014/03/05 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
PHP封装的HttpClient类用法实例
2015/06/17 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
最新最全PHP生成制作验证码代码详解(推荐)
2016/06/12 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
JS无限树状列表实现代码
2011/01/11 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
使用javascript为网页增加夜间模式
2014/01/26 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
jQuery实现最简单实用的分秒倒计时
2017/02/05 Javascript
Bootstrap轮播图学习使用
2017/02/10 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
2019/04/08 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
Python MD5文件生成码
2009/01/12 Python
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
菜鸟使用python实现正则检测密码合法性
2016/01/05 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
什么是python的函数体
2020/06/19 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
《雨霖铃》听课反思
2014/02/13 职场文书
社区文艺活动方案
2014/08/19 职场文书
在校大学生自我评价范文
2014/09/12 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书