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  连接字符串(join %)
Sep 06 Python
python算法学习之计数排序实例
Dec 18 Python
Python处理RSS、ATOM模块FEEDPARSER介绍
Feb 18 Python
用Python的线程来解决生产者消费问题的示例
Apr 02 Python
Python加pyGame实现的简单拼图游戏实例
May 15 Python
python xml解析实例详解
Nov 14 Python
Python提取频域特征知识点浅析
Mar 04 Python
python 对字典按照value进行排序的方法
May 09 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
May 25 Python
python tqdm实现进度条的示例代码
Nov 10 Python
python绘制雷达图实例讲解
Jan 03 Python
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
Zend Guard使用指南及问题处理
2015/01/07 PHP
详解EventDispatcher事件分发组件
2016/12/25 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
php源码的安装方法和实例
2019/09/26 PHP
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
javascript每日必学之多态
2016/02/23 Javascript
Bootstrap进度条组件知识详解
2016/05/01 Javascript
前端微信支付js代码
2016/07/25 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
JS作用域深度解析
2016/12/29 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
Python中字符串的格式化方法小结
2016/05/03 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
Python学习小技巧之列表项的推导式与过滤操作
2017/05/20 Python
python中MethodType方法介绍与使用示例
2017/08/03 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
python write无法写入文件的解决方法
2019/01/23 Python
详解python数据结构和算法
2019/04/18 Python
python多任务之协程的使用详解
2019/08/26 Python
Python range、enumerate和zip函数用法详解
2019/09/11 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
使用HTML5 IndexDB存储图像和文件的示例
2018/11/05 HTML / CSS
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
自荐信如何“自荐”
2013/10/24 职场文书
人事专员的职责
2014/02/26 职场文书