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实现从订阅源下载图片的方法
Mar 11 Python
使用Python实现下载网易云音乐的高清MV
Mar 16 Python
用Python编写一个简单的Lisp解释器的教程
Apr 03 Python
Python中有趣在__call__函数
Jun 21 Python
django自带的server 让外网主机访问方法
May 14 Python
Python封装原理与实现方法详解
Aug 28 Python
python环境路径配置以及命令行运行脚本
Apr 02 Python
python实现beta分布概率密度函数的方法
Jul 08 Python
python实现kNN算法识别手写体数字的示例代码
Aug 16 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
Python requests获取网页常用方法解析
Feb 20 Python
DataFrame 数据合并实现(merge,join,concat)
Jun 14 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身份证校验码计算方法
2016/08/10 PHP
php面向对象之反射功能与用法分析
2017/03/29 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
JS 树形递归实例代码
2010/05/18 Javascript
js判断横竖屏及禁止浏览器滑动条示例
2014/04/29 Javascript
Jquery实现纵向横向菜单
2016/01/24 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
jQuery插件扩展测试实例
2016/06/21 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
JavaScript中AOP的实现与应用
2019/05/06 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
Python格式化css文件的方法
2015/03/10 Python
Django Highcharts制作图表
2016/08/27 Python
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
Python flask框架post接口调用示例
2019/07/03 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
自我评价的正确写法
2013/09/19 职场文书
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
2015年公司新年寄语
2014/12/08 职场文书
浪漫的婚礼主持词
2015/06/30 职场文书
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android
Python使用openpyxl批量处理数据
2021/06/23 Python