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 开发Activex组件方法
Nov 08 Python
Python实现获取某天是某个月中的第几周
Feb 11 Python
TensorFlow安装及jupyter notebook配置方法
Sep 08 Python
Python创建对称矩阵的方法示例【基于numpy模块】
Oct 12 Python
python机器学习案例教程——K最近邻算法的实现
Dec 28 Python
matplotlib作图添加表格实例代码
Jan 23 Python
python得到windows自启动列表的方法
Oct 14 Python
Python urllib2运行过程原理解析
Jun 04 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
Feb 27 Python
Pytorch 统计模型参数量的操作 param.numel()
May 13 Python
Python实现学生管理系统(面向对象版)
Jun 24 Python
使用pipenv管理python虚拟环境的全过程
Sep 25 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部分常见问题总结
2008/03/27 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
Use Word to Search for Files
2007/06/15 Javascript
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
深入理解JavaScript继承的多种方式和优缺点
2017/05/12 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
AngularJs导出数据到Excel的示例代码
2017/08/11 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
通过微信公众平台获取公众号文章的方法示例
2019/12/25 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
Python中将变量按行写入txt文本中的方法
2018/04/03 Python
基于python3 OpenCV3实现静态图片人脸识别
2018/05/25 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
美国最大的万圣节服装网站:HalloweenCostumes.com
2017/10/12 全球购物
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
怎么处理XML的中文问题
2015/03/26 面试题
打造完美自荐信
2014/01/24 职场文书
六年级数学教学反思
2014/02/03 职场文书
庆国庆活动总结
2014/08/28 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
小学中等生评语
2014/12/29 职场文书
慰问信格式
2015/02/14 职场文书
员工辞职信怎么写
2015/02/27 职场文书
品质保证书格式
2015/02/28 职场文书
入党培养人考察意见
2015/06/08 职场文书
python 安全地删除列表元素的方法
2022/03/16 Python