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性能优化的20条建议
Oct 25 Python
Python写入数据到MP3文件中的方法
Jul 10 Python
Python实现截屏的函数
Jul 26 Python
Python 递归函数详解及实例
Dec 27 Python
详解Python在七牛云平台的应用(一)
Dec 05 Python
详解python string类型 bytes类型 bytearray类型
Dec 16 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
解决django接口无法通过ip进行访问的问题
Mar 27 Python
Django 后台带有字典的列表数据与页面js交互实例
Apr 03 Python
Python 实现一个计时器
Jul 28 Python
python编写扎金花小程序的实例代码
Feb 23 Python
详解Python类和对象内容
Jun 22 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 base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
PHP实现全角字符转为半角方法汇总
2015/07/09 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
Java设计中的Builder模式的介绍
2018/03/22 Javascript
angular2实现统一的http请求头方法
2018/08/13 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
Pthon批量处理将pdb文件生成dssp文件
2015/06/21 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
Python设计模式之工厂模式简单示例
2018/01/09 Python
Python3生成手写体数字方法
2018/01/30 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
2019/01/29 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
python2 对excel表格操作完整示例
2020/02/23 Python
Django封装交互接口代码
2020/07/12 Python
Django中的DateTimeField和DateField实现
2021/02/24 Python
酒店保洁主管岗位职责
2013/11/28 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
外国人聘用意向书
2014/04/01 职场文书
中学生纪念九一八事变演讲稿
2014/09/14 职场文书
升学宴学生答谢词
2015/01/05 职场文书
职工培训工作总结
2015/08/10 职场文书
致运动员的广播稿
2015/08/19 职场文书
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL
Nginx实现会话保持的两种方式
2022/03/18 Servers
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA