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正则表达式介绍
Aug 06 Python
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
python对指定目录下文件进行批量重命名的方法
Apr 18 Python
在Django中使用Sitemap的方法讲解
Jul 22 Python
Python 快速实现CLI 应用程序的脚手架
Dec 05 Python
python学习入门细节知识点
Mar 29 Python
python实现基于朴素贝叶斯的垃圾分类算法
Jul 09 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
Python3.7黑帽编程之病毒篇(基础篇)
Feb 04 Python
Python列表解析操作实例总结
Feb 26 Python
python程序输出无内容的解决方式
Apr 09 Python
基于PyTorch中view的用法说明
Mar 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
改德生G88 - 加装等响度低音提升电路
2021/03/02 无线电
php 学习资料零碎东西
2010/12/04 PHP
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
html读出文本文件内容
2007/01/22 Javascript
多个jQuery版本共存的处理方案
2015/03/17 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
纯js模仿windows系统日历
2017/02/04 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
js HTML DOM EventListener功能与用法实例分析
2020/04/27 Javascript
Python使用urllib模块的urlopen超时问题解决方法
2014/11/08 Python
Python中使用PIPE操作Linux管道
2015/02/04 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
Python queue队列原理与应用案例分析
2019/09/27 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
存储过程的优点有哪些
2012/09/27 面试题
咨询公司各岗位职责
2013/12/02 职场文书
领导党性分析材料
2014/02/15 职场文书
节能减排倡议书
2014/04/15 职场文书
优秀大学生自荐信
2014/06/09 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
少年雷锋观后感
2015/06/10 职场文书
如何写好竞聘报告
2019/04/03 职场文书
Win11如何查看显卡型号 Win11查看显卡型号的方法
2022/08/14 数码科技