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实现在pickling的时候压缩的方法
Sep 25 Python
Python编写生成验证码的脚本的教程
May 04 Python
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
Nov 01 Python
Python爬虫的两套解析方法和四种爬虫实现过程
Jul 20 Python
Python利用heapq实现一个优先级队列的方法
Feb 03 Python
Python调用C语言的实现
Jul 26 Python
python实现扫雷小游戏
Apr 24 Python
Pycharm如何自动生成头文件注释
Nov 14 Python
python 将html转换为pdf的几种方法
Dec 29 Python
详解Pymongo常用查询方法总结
Jan 29 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 disk_free_space 返回目录可用空间
2010/05/10 PHP
Drupal7连接多个数据库及常见问题解决
2014/03/02 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
script的async属性以非阻塞的模式加载脚本
2013/01/15 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
详解AngularJs中$resource和restfu服务端数据交互
2016/09/21 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
vue脚手架搭建过程图解
2018/06/06 Javascript
laypage+SpringMVC实现后端分页
2019/07/27 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
Vue2.0 $set()的正确使用详解
2020/07/28 Javascript
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
python简单操作excle的方法
2018/09/12 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
django 实现后台从富文本提取纯文本
2020/07/02 Python
Python-openpyxl表格读取写入的案例详解
2020/11/02 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
巧克力蛋糕店创业计划书
2014/01/14 职场文书
高一英语教学反思
2014/01/22 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
2015年社区重阳节活动总结
2015/07/30 职场文书
法制主题班会教案
2015/08/13 职场文书
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL