Tensorflow分批量读取数据

之前的博客里使用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 tfdef 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, labeldef batch_input(filename, batchSize):fileNameQue = tf.train.string_input_producer([filename], shuffle=True)img, label = read_data(fileNameQue) # fetch图像和labelmin_after_dequeue = 1000capacity = 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,labelBatchif __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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

读取数据和解码数据与之前基本相同,针对不同格式数据集使用不同阅读器和解码器即可,后面是产生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分批量读取tfrecords相关推荐

  1. tensorflow 标准数据读取 tfrecords

    TensorFlow提供了一种TFRecords的格式来统一存储数据.理论上,TFRecords可以存储任何形式的数据 , TFRecords文件的是以tf.train.Example Protoco ...

  2. 由浅入深之Tensorflow(3)----数据读取之TFRecords

    由浅入深之Tensorflow(3)----数据读取之TFRecords 转载自http://blog.csdn.net/u012759136/article/details/52232266 原文作 ...

  3. python如何读取tfrecord_tensorflow读取tfrecords格式文件

    dataset基本原理: 1.写入tfrecords文件: |图片|文字 ->格式转换->example(tf.train.Example)生成 ->write(tf.python_ ...

  4. python批量读取csv文件-使用Python读写csv文件的三种方法

    行之间无空行十分重要,如果有空行或者数据集中行末有空格,读取数据时一般会出错,引发[list index out of range]错误.PS:已经被这个错误坑过很多次! 使用python I/O写入 ...

  5. 【Elasticsearch】elasticsearch里面的关于批量读取mget的用法

    1.概述 转载并且补充:elasticsearch里面的关于批量读取mget的用法 es的api除了提供了基本的curd操作外,还有两个针对批量的操作分别是: 批量的读取操作(mget) 批量的写入操 ...

  6. rraylist参数_R语言︱list用法、批量读取、写出数据时的用法

    列表是一种特别的对象集合,它的元素也由序号(下标)区分,但是各元素的类型可 以是任意对象,不同元素不必是同一类型.元素本身允许是其它复杂数据类型,比如,列表 的一个元素也允许是列表.例如: > ...

  7. R语言︱list用法、批量读取、写出数据时的用法

    列表是一种特别的对象集合,它的元素也由序号(下标)区分,但是各元素的类型可 以是任意对象,不同元素不必是同一类型.元素本身允许是其它复杂数据类型,比如,列表 的一个元素也允许是列表.例如: > ...

  8. python批量读取图片gps位置_某少儿不宜网站图片拍摄位置分析,Python批量读取图片GPS位置!...

    原标题:某少儿不宜网站图片拍摄位置分析,Python批量读取图片GPS位置! 1. python读取图片exif属性中的GPS信息 智能手机或平板如果在拍照时开启定位服务,照片中就会记录拍照位置信息和 ...

  9. 高斯输出文件批量读取能量

    批量读取能量 问题背景 解决办法 后记 问题背景 在量化计算时,能量是比较重要的概念,而在高斯的输出文件中能量数值往往藏在巨大的文本文件.log中.根据计算任务的大小,.log文件大小也有变化,不过日 ...

最新文章

  1. jquery日历插件FullCalendar使用技巧
  2. 人工智能开始应用于美国金融业 但在中国遭遇滑铁卢
  3. 《不留》--王菲 Faye
  4. 解决Springboot+JPA中多表关联查询会查询多次的问题(n+1查询问题)
  5. [转]int.ToString()输出不同格式的数字字符串
  6. python command line debug_【已解决】Mac中PyCharm中去加断点实时调试scrapy的项目
  7. 安卓手机qq怎么看密友值_qq亲密关系分数值是什么在哪看 怎么查情侣值或闺蜜值方法...
  8. Java 基础整理(一)
  9. C语言的很吊的printf-----来自一个C语言竞赛题目
  10. oracle第三天笔记
  11. php采集规则,dedecms采集规则怎么编写
  12. java 编写桌面_利用Java技术编写桌面软件基础
  13. 数据库以及Mysql入门
  14. 皇太极有多宠爱宸妃海兰珠,从这三件事可以看出
  15. Clojure 学习入门(8)—— 连接mongodb
  16. Pubmed数据库改版后如何做计量分析与知识图谱
  17. 获取手机联系人,并通过拼音字母快速查询
  18. Github 开源:使用 .NET WinForm 开发所见即所得的 IDE 开发环境(Sheng.Winform.IDE)【2.源代码简要说明】
  19. 人脸检测颜值软件_智能人脸测试app下载-AI智能人脸测试软件(颜值测试) v1.0.0511_5577安卓网...
  20. GIS讲堂第四课-大量POI点的展示

热门文章

  1. java迭代器在哪个包里面,java.util.LinkedList.listIterator()方法实例
  2. android xml pid vid,增加属性标识摄像头的vid与pid,以便知道摄像头与设备文件的对应关系...
  3. JAVA String format 方法使用介绍
  4. mongo java client_mongodb java客户端的使用,即MongoClient
  5. python canvas画移动物体_canvas中绘制的图像怎么让它移动?
  6. power指令集 mysql_PowerPC汇编指令集简析
  7. python开发需要掌握的知识_(深度学习)Python必须掌握基础知识,python,必会,知识点...
  8. vscode从原有分支上新建_GitHub+VSCode 打造稳定、快速、高效、免费图床
  9. 马斯克脑洞破解谁是“中本聪”?
  10. Java版的开源 Flappy Bird 复刻项目