Tensorflow分批量读取数据教程


Posted in Python onFebruary 07, 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实例之wxpython中Frame使用方法
Jun 09 Python
Python简单获取自身外网IP的方法
Sep 18 Python
itchat接口使用示例
Oct 23 Python
python获取指定字符串中重复模式最高的字符串方法
Jun 29 Python
python实现遍历文件夹修改文件后缀
Aug 28 Python
OpenCV 轮廓检测的实现方法
Jul 03 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
Aug 13 Python
Python任务自动化工具tox使用教程
Mar 17 Python
Python正则表达式如何匹配中文
May 27 Python
使用豆瓣源来安装python中的第三方库方法
Jan 26 Python
Python使用Beautiful Soup(BS4)库解析HTML和XML
Jun 05 Python
python统计字符的个数代码实例
Feb 07 #Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
Feb 07 #Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
Feb 07 #Python
Python reshape的用法及多个二维数组合并为三维数组的实例
Feb 07 #Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
Feb 07 #Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 #Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 #Python
You might like
获取Javscript执行函数名称的方法
2006/12/22 Javascript
javascript 类定义的4种方法
2009/09/12 Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
Js 回车换行处理的办法及replace方法应用
2013/01/24 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
JavaScript动态修改弹出窗口大小的方法
2015/04/06 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
微信小程序 如何引入外部字体库iconfont的图标
2018/01/31 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
jQuery插件Validation表单验证详解
2018/05/26 jQuery
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
Python random模块常用方法
2014/11/03 Python
Python实现比较两个列表(list)范围
2015/06/12 Python
5个很好的Python面试题问题答案及分析
2018/01/19 Python
python版飞机大战代码分享
2018/11/20 Python
python多任务及返回值的处理方法
2019/01/22 Python
Python 如何实现访问者模式
2020/07/28 Python
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
Tom Dixon官网:英国照明及家具设计和制造公司
2019/03/01 全球购物
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
HSRP的含义以及如何工作
2014/09/10 面试题
应征英语教师求职信
2013/11/27 职场文书
销售业务员岗位职责
2015/02/13 职场文书
2015年乡镇发展党员工作总结
2015/03/31 职场文书
golang 实现菜单树的生成方式
2021/04/28 Golang
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫