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中使用PIL库实现图片高斯模糊实例
Feb 08 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
May 24 Python
python 连接sqlite及简单操作
Jun 30 Python
python模拟事件触发机制详解
Jan 19 Python
Python装饰器用法示例小结
Feb 11 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
May 08 Python
Django 限制用户访问频率的中间件的实现
Aug 23 Python
用pyqt5 给按钮设置图标和css样式的方法
Jun 24 Python
python实现3D地图可视化
Mar 25 Python
基于Python实现2种反转链表方法代码实例
Jul 06 Python
Django中Aggregation聚合的基本使用方法
Jul 09 Python
python中pd.cut()与pd.qcut()的对比及示例
Jun 16 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 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
JavaScript 函数调用规则
2009/09/14 Javascript
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
javascript的数据类型、字面量、变量介绍
2012/05/23 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
谈谈js中的prototype及prototype属性解释和常用方法
2015/11/25 Javascript
js密码强度检测
2016/01/07 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
[57:16]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第二场
2014/05/26 DOTA
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
python排序方法实例分析
2015/04/30 Python
详解用python实现简单的遗传算法
2018/01/02 Python
python 绘制拟合曲线并加指定点标识的实现
2019/07/10 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
python将print输出的信息保留到日志文件中
2019/09/27 Python
Python3离线安装Requests模块问题
2019/10/13 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
Linux面试经常问的文件系统操作命令
2015/11/05 面试题
2015应届毕业生求职信范文
2015/03/20 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
员工辞退通知书
2015/04/17 职场文书
校园安全学习心得体会
2016/01/18 职场文书
sql通过日期判断年龄函数的示例代码
2021/07/16 SQL Server