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实现根据用户输入从电影网站获取影片信息的方法
Apr 07 Python
python实现给数组按片赋值的方法
Jul 28 Python
python MySQLdb使用教程详解
Mar 20 Python
Python绘制正余弦函数图像的方法
Aug 28 Python
python tkinter界面居中显示的方法
Oct 11 Python
python opencv调用笔记本摄像头
Aug 28 Python
python实现滑雪游戏
Feb 22 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
Mar 09 Python
python 使用elasticsearch 实现翻页的三种方式
Jul 31 Python
pycharm专业版远程登录服务器的详细教程
Sep 15 Python
python tkinter实现连连看游戏
Nov 16 Python
python 实现百度网盘非会员上传超过500个文件的方法
Jan 07 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
超人钢铁侠联手合作?美漫作家呼吁DC漫威合作联动以抵抗疫情
2020/04/09 欧美动漫
php adodb分页实现代码
2009/03/19 PHP
php 无法载入mysql扩展
2010/03/12 PHP
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
php使用str_shuffle()函数生成随机字符串的方法分析
2017/02/17 PHP
PHP crypt()函数的用法讲解
2019/02/15 PHP
laravel执行php artisan migrate报错的解决方法
2019/10/09 PHP
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
jquery1.10给新增元素绑定事件的方法
2014/03/06 Javascript
javascript中的3种继承实现方法
2016/01/27 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
Vue加载json文件的方法简单示例
2019/01/28 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
JavaScript onclick事件使用方法详解
2020/05/15 Javascript
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
python学习开发mock接口
2019/04/28 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
2019/04/29 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
python变量命名的7条建议
2019/07/04 Python
springboot配置文件抽离 git管理统 配置中心详解
2019/09/02 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
python 安装移动复制第三方库操作
2020/07/13 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
Myholidays美国:在线旅游网站
2019/08/16 全球购物
就业自荐书
2013/12/05 职场文书
暑期辅导班宣传单
2015/07/14 职场文书
婚宴领导致辞
2015/07/28 职场文书
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
HTML+JS实现在线朗读器
2022/02/15 Javascript