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 13 Python
python解析html提取数据,并生成word文档实例解析
Jan 22 Python
Python通过属性手段实现只允许调用一次的示例讲解
Apr 21 Python
Python3中的json模块使用详解
May 05 Python
python利用ffmpeg进行录制屏幕的方法
Jan 10 Python
很酷的python表白工具 你喜欢我吗
Apr 11 Python
flask应用部署到服务器的方法
Jul 12 Python
python从zip中删除指定后缀文件(推荐)
Dec 05 Python
python编程进阶之类和对象用法实例分析
Feb 21 Python
python实现图片横向和纵向拼接
Mar 05 Python
python绘制分布折线图的示例
Sep 24 Python
Python爬取梨视频的示例
Jan 29 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
在wamp集成环境下升级php版本(实现方法)
2013/07/01 PHP
PHP小教程之实现链表
2014/06/09 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
CI框架常用函数封装实例
2016/11/21 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
JavaScript内核之基本概念
2011/10/21 Javascript
JS删除数组元素的函数介绍
2013/03/27 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
2019/01/25 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
python时间整形转标准格式的示例分享
2014/02/14 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
Django配置跨域并开发测试接口
2020/11/04 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
Html5之webcoekt播放JPEG图片流
2020/09/22 HTML / CSS
公司联欢晚会主持词
2014/03/22 职场文书
抽奖活动主持词
2014/03/31 职场文书
售房委托书
2014/08/30 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
出售房屋委托书范本
2014/09/24 职场文书
会议欢迎词范文
2015/01/27 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
清明祭英烈活动总结
2015/05/11 职场文书
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers