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 pickle类库介绍(对象序列化和反序列化)
Nov 21 Python
Python回调函数用法实例详解
Jul 02 Python
Python存取XML的常见方法实例分析
Mar 21 Python
TensorFlow深度学习之卷积神经网络CNN
Mar 09 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
Oct 17 Python
Python判断一个文件夹内哪些文件是图片的实例
Dec 07 Python
Django中如何使用sass的方法步骤
Jul 09 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
Oct 12 Python
pygame实现贪吃蛇游戏(上)
Oct 29 Python
python实现从wind导入数据
Dec 03 Python
Python谱减法语音降噪实例
Dec 18 Python
python中property和setter装饰器用法
Dec 19 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
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
PHP查询网站的PR值
2013/10/30 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
2014/11/06 PHP
php实现的ping端口函数实例
2014/11/12 PHP
PHP程序员常见的40个陋习,你中了几个?
2014/11/20 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
jQuery.Autocomplete实现自动完成功能(详解)
2010/07/13 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
深入理解Python分布式爬虫原理
2017/11/23 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
Python操作Jira库常用方法解析
2020/04/10 Python
django ORM之values和annotate使用详解
2020/05/19 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
浅析NumPy 切片和索引
2020/09/02 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
会计系个人求职信范文分享
2013/12/20 职场文书
行政部主管岗位职责
2013/12/28 职场文书
材料会计岗位职责
2014/03/06 职场文书
工作会议主持词
2014/03/17 职场文书
产品开发计划书
2014/04/27 职场文书
捐书活动总结
2014/05/04 职场文书
政风行风整改报告
2014/11/06 职场文书
2014年高中教师工作总结
2014/12/19 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书