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 multiprocessing.Manager介绍和实例(进程间共享数据)
Nov 21 Python
详解Python的Django框架中Manager方法的使用
Jul 21 Python
利用Python开发实现简单的记事本
Nov 15 Python
django中的setting最佳配置小结
Nov 21 Python
Python进阶之递归函数的用法及其示例
Jan 31 Python
Python 实现12306登录功能实例代码
Feb 09 Python
Python 调用 zabbix api的方法示例
Jan 06 Python
python简单实现AES加密和解密
Mar 28 Python
使用WingPro 7 设置Python路径的方法
Jul 24 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
Python如何使用paramiko模块连接linux
Mar 18 Python
python pygame 开发五子棋双人对弈
May 02 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基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
Prototype使用指南之enumerable.js
2007/01/10 Javascript
Javascript this指针
2009/07/30 Javascript
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
js Object2String方便查看js对象内容
2014/11/24 Javascript
浅析2种JavaScript继承方式
2015/12/04 Javascript
用JS动态改变表单form里的action值属性的两种方法
2016/05/25 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
2018/03/21 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
前端路由&webpack基础配置详解
2019/06/10 Javascript
layui的面包屑或者表单不显示的解决方法
2019/09/05 Javascript
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
Python的Flask站点中集成xhEditor文本编辑器的教程
2016/06/13 Python
python3使用pandas获取股票数据的方法
2018/12/22 Python
Python Pandas分组聚合的实现方法
2019/07/02 Python
Python中Flask-RESTful编写API接口(小白入门)
2019/12/11 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题
2013/07/19 HTML / CSS
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
介绍一下OSI七层模型
2012/07/03 面试题
体育专业个人求职信范文
2013/12/27 职场文书
医学生自我鉴定范文
2014/03/26 职场文书
拾金不昧表扬稿大全
2015/05/05 职场文书
安全责任协议书范本
2016/03/23 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
Python list去重且保持原顺序不变的方法
2021/04/03 Python