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类方法与对象方法
Mar 15 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
Jan 07 Python
Tensorflow环境搭建的方法步骤
Feb 07 Python
python实现数据导出到excel的示例--普通格式
May 03 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
详解Python3中ceil()函数用法
Feb 19 Python
python如何实现从视频中提取每秒图片
Oct 22 Python
Python爬虫爬取Bilibili弹幕过程解析
Oct 10 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
Feb 11 Python
Python unittest工作原理和使用过程解析
Feb 24 Python
python与idea的集成的实现
Nov 20 Python
Django使用echarts进行可视化展示的实践
Jun 10 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
PHP输入流php://input介绍
2012/09/18 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
php生成HTML文件的类方法
2019/10/11 PHP
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
基于jQuery的树控件实现代码(asp.net+json)
2010/07/11 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
2015/12/14 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
2016/03/06 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
vue3.0 CLI - 3.2 路由的初级使用教程
2018/09/20 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
原生js实现自定义难度的扫雷游戏
2021/01/22 Javascript
python web框架 django wsgi原理解析
2019/08/20 Python
python实现将一维列表转换为多维列表(numpy+reshape)
2019/11/29 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
印尼旅游网站:via
2017/11/12 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
大学生职业生涯规划书
2014/03/14 职场文书
疾病捐款倡议书
2014/05/13 职场文书
专题组织生活会方案
2014/06/15 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
抢劫罪辩护词
2015/05/21 职场文书
法律服务所工作总结
2015/08/10 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
python分分钟绘制精美地图海报
2022/02/15 Python