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中使用百度音乐搜索的api下载指定歌曲的lrc歌词
Jul 18 Python
Python采用raw_input读取输入值的方法
Aug 18 Python
python实现从字典中删除元素的方法
May 04 Python
Python数据结构与算法之字典树实现方法示例
Dec 13 Python
Zookeeper接口kazoo实例解析
Jan 22 Python
Pytorch入门之mnist分类实例
Apr 14 Python
解决python爬虫中有中文的url问题
May 11 Python
Python脚本完成post接口测试的实例
Dec 17 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
Feb 27 Python
Django CSRF认证的几种解决方案
Mar 03 Python
python程序输出无内容的解决方式
Apr 09 Python
python3 字符串str和bytes相互转换
Mar 23 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自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
PHP执行普通shell命令流程解析
2020/08/24 PHP
Jquery AutoComplete自动完成 的使用方法实例
2010/03/19 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
nodejs下打包模块archiver详解
2014/12/03 NodeJs
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
js中函数声明与函数表达式
2015/06/03 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
2017/04/13 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
Python函数的周期性执行实现方法
2016/08/13 Python
django 使用 request 获取浏览器发送的参数示例代码
2018/06/11 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
2013/06/09 HTML / CSS
如何执行一个shell程序
2012/11/23 面试题
如何现实servlet的单线程模式
2014/08/05 面试题
元宵节晚会主持人串词
2014/03/25 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
优秀团员事迹材料
2014/12/25 职场文书
党风廉政承诺书2016
2016/03/25 职场文书
创业开店,这样方式更合理
2019/08/26 职场文书
《好妈妈胜过好老师》:每个孩子的优秀都是有源头的
2020/01/03 职场文书
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏
spring boot实现文件上传
2022/08/14 Java/Android