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中用于计算指数的exp()方法
May 14 Python
python实现自动登录人人网并采集信息的方法
Jun 28 Python
Python制作爬虫采集小说
Oct 25 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
Jan 30 Python
Python socket实现多对多全双工通信的方法
Feb 13 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
Jul 23 Python
在pycharm中显示python画的图方法
Aug 31 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
Feb 18 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
Feb 27 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上的memcache和memcached两个pecl库
2010/03/29 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
html数组字符串拼接的最快方法
2009/09/16 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
PHP abstract与interface之间的区别
2013/11/11 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
Vue移动端实现图片上传及超过1M压缩上传
2019/12/23 Javascript
python音频处理用到的操作的示例代码
2017/10/27 Python
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
python实现AES加密和解密
2019/03/27 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
Baby Tulai澳大利亚:美国婴儿背带品牌
2018/10/15 全球购物
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
高中物理教学反思
2014/02/08 职场文书
高中军训感想300字
2014/03/04 职场文书
医院义诊活动总结
2014/07/04 职场文书
组工干部对照检查材料
2014/08/25 职场文书
租房协议书范例
2014/10/14 职场文书
领导干部群众路线对照检查材料
2014/11/05 职场文书
教师听课评语大全
2014/12/31 职场文书
狂人日记读书笔记
2015/06/30 职场文书
CSS中使用grid布局实现一套模板多种布局
2022/07/15 HTML / CSS