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实现简单截取中文字符串的方法
Jun 15 Python
使用相同的Apache实例来运行Django和Media文件
Jul 22 Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 Python
微信跳一跳python自动代码解读1.0
Jan 12 Python
TensorFlow实现Logistic回归
Sep 07 Python
Appium+python自动化怎么查看程序所占端口号和IP
Jun 14 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 Python
python 接口实现 供第三方调用的例子
Aug 13 Python
python模拟键盘输入 切换键盘布局过程解析
Aug 15 Python
python实现回旋矩阵方式(旋转矩阵)
Dec 04 Python
Python 炫技操作之合并字典的七种方法
Apr 10 Python
python 6种方法实现单例模式
Dec 15 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
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
8个必备的PHP功能实例代码
2013/10/27 PHP
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
移动端手指放大缩小插件与js源码
2017/05/22 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
在vue项目中引入highcharts图表的方法(详解)
2018/03/05 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
JavaScript常用内置对象用法分析
2019/07/09 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2009/04/09 Python
浅谈Python中函数的参数传递
2016/06/21 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
PIL包中Image模块的convert()函数的具体使用
2020/02/26 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
New Balance俄罗斯官方网上商店:购买运动鞋
2020/03/02 全球购物
制药工程专业应届生求职信
2013/09/24 职场文书
目标管理责任书
2014/04/15 职场文书
护士求职信范文
2014/05/24 职场文书
应急管理培训方案
2014/06/12 职场文书
外贸业务员求职信
2014/06/16 职场文书
学生检讨书怎么写
2014/10/09 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书