系列博客链接:

第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html

第二章第二部分)TensorFlow框架之读取图片数据:https://www.cnblogs.com/kongweisi/p/11050539.html

本文概述:

  • 目标

    • 应用tf.FixedLengthRecordReader实现二进制文件读取
    • 应用tf.decode_raw实现解码二进制数据
  • 应用
    • CIFAR10类图片数据读取

1、CIFAR10二进制数据集介绍

  1. https://www.cs.toronto.edu/~kriz/cifar.html
  • 二进制版本数据文件

二进制版本

二进制版本包含文件data_batch_1.bin,data_batch_2.bin,...,data_batch_5.bin以及test_batch.bin。

这些文件中的每一个格式如下,数据中每个样本包含了目标值和特征值

  1. <1×标签> <3072×像素>
  2. ...
  3. <1×标签> <3072×像素>

第一个字节是第一个图像的标签,它是一个0-9范围内的数字。接下来的3072个字节是图像像素的值前1024个字节是红色通道值,下1024个绿色,最后1024个蓝色。值以行优先顺序存储,因此前32个字节是图像第一行的红色通道值。 每个文件都包含10000个这样的3073字节的“行”图像,但没有任何分隔行的限制。因此每个文件应该完全是30730000字节长。

2、CIFAR10 二进制数据读取

2.1 分析

  • 构造文件队列
  • 读取二进制数据并进行解码
  • 处理图片数据形状以及数据类型,批处理返回
  • 开启会话线程运行

2.2 代码

  • 定义CIFAR类
  1. class CifarRead(object):
  2. """
  3. 二进制文件的读取,tfrecords存储读取
  4. """
  5.  
  6. def __init__(self):
  7. # 定义一些图片的属性
  8. self.height = 32
  9. self.width = 32
  10. self.channel = 3
  11.  
  12. self.label_bytes = 1
  13. self.image_bytes = self.height * self.width * self.channel
  14. self.bytes = self.label_bytes + self.image_bytes
  • 实现读取数据方法read_and_decode(self, file_list)
  1. def read_and_decode(self, file_list):
  2. """
  3. 读取二进制原始数据,解码成数据张量
  4. :return:
  5. """
  6. # 1、找构造文件队列
  7. file_queue = tf.train.string_input_producer(file_list)
  8.  
  9. # 2、使用二进制读取器读取内容
  10. # 一共读取 1+3072=3073个字节
  11. reader = tf.FixedLengthRecordReader(self.bytes)
  12.  
  13. # 此时的value是某个文件的某个样本
  14. key, value = reader.read(file_queue)
  15.  
  16. # 3、二进制数据解码 decode_raw
  17. label_image = tf.decode_raw(value, tf.uint8)
  18.  
  19. print(label_image)
  20. # 把图片的特征值和目标值单独拿出来处理
  21. # tf.slice切片 label是:[0] 到 [1] image是:[1] 到 [3072]
  22. label = tf.slice(label_image, [0], [self.label_bytes])
  23. image = tf.slice(label_image, [self.label_bytes], [self.image_bytes])
  24.  
  25. # 标签、图片的类型转换、形状转换
  26. label_cast = tf.cast(label, tf.int32)
  27.  
  28. # 设置图片的特征值形状
  29. # 使用reshape去修改形状
  30. # 图片特征值的数据,如果用于去训练计算,可以转换成float32类型
  31. image_reshape = tf.reshape(image, [self.height, self.width, self.channel])
  32.  
  33. print(label_cast, image_reshape)
  34.  
  35. # 4、批处理图片数据
  36. image_batch, label_batch = tf.train.batch([image_reshape, label_cast], batch_size=10, num_threads=1, capacity=10)
  37.  
  38. return image_batch, label_batch
  • 会话逻辑
  1. if __name__ == "__main__":
  2. # 生成路径+文件名的列表
  3. filename = os.listdir(FLAGS.cifar_datadir)
  4.  
  5. # 路径+名字拼接
  6. file_list = [os.path.join(FLAGS.cifar_datadir, file) for file in filename if file[-3:] == "bin"]
    # file_list = [os.path.join("路径", file) for file in filename]

  1.   # 实例化类
  2. cr = CifarRead()
  3.  
  4. # 从原始二进制文件读取
  5. image_batch, label_batch = cr.read_and_decode(file_list)

  6.   # 开启会话打印内容
  7. with tf.Session() as sess:
  8. # 创建线程协调器
  9. coord = tf.train.Coordinator()
  10.  
  11. # 开启子线程去读取数据
  12. # 返回子线程实例
  13. threads = tf.train.start_queue_runners(sess=sess, coord=coord)
  14.  
  15. # 获取样本数据去训练
  16. print(sess.run([image_batch, label_batch]))
  17.  
  18. # 关闭子线程,回收
  19. coord.request_stop()
  20.  
  21. coord.join(threads)

(第二章第三部分)TensorFlow框架之读取二进制数据的更多相关文章

  1. (第二章第二部分)TensorFlow框架之读取图片数据

    系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html 本文概述: 目标 说明图片 ...

  2. (第二章第一部分)TensorFlow框架之文件读取流程

    本章概述:在第一章的系列文章中介绍了tf框架的基本用法,从本章开始,介绍与tf框架相关的数据读取和写入的方法,并会在最后,用基础的神经网络,实现经典的Mnist手写数字识别. 有四种获取数据到Tens ...

  3. 【Web探索之旅】第二部分第三课:框架和内容管理系统

    内容简介 1.第二部分第三课:框架和内容管理系统 2.第二部分第四课预告:数据库   第二部分第三课:框架和内容管理系统 上一课我们介绍了服务器端的编程语言,有PHP,Java,Python,Ruby ...

  4. CSS3秘笈复习:第一章&第二章&第三章

    第一章: 1.<cite>标签不仅可以将网页设置为斜体,还能给标题做上标记,使它便于被搜索引擎搜索到. 第二章: 1.import指令链接样式表: CSS本身有一种添加外部样式的方法:@i ...

  5. jQuery复习:第二章&第三章

    第二章 一.选择器 1.层次选择器 $(“ancestor descendant”)选取ancestor元素里的所有后代元素 $(“parent > child”)选取parent元素下的chi ...

  6. 使用MYSQL数据库实现编程----第二章第三章课堂知识小总结

    第二章1:创建数据库create database myschool 2.数据类型  1.整型 int  2.小数 double  精确度要求高的 ----Decimal(18,4)  2222222 ...

  7. (第一章第一部分)TensorFlow框架介绍

    接下来会更新一系列博客,介绍TensorFlow的入门使用,尽可能详细. 本文概述: 说明TensorFlow的数据流图结构 1.数据流图介绍  TensorFlow是一个采用数据流图(data fl ...

  8. 《数据结构与算法Python语言描述》习题第二章第三题(python版)

    ADT Rational: #定义有理数的抽象数据类型 Rational(self, int num, int den) #构造有理数num/den +(self, Rational r2) #求出本 ...

  9. flask框架下读取mysql数据 转换成json格式API

    研究了一天 因为需要从数据库拿数据然后转换成json的格式 expose出去为 API 发现一条数据是容易,两条以上我居然搞了这么久 好歹出来了 先贴一下 后面更新 mysql的操作 比较容易了htt ...

随机推荐

  1. React之redux学习日志(redux/react-redux/redux-saga)

    redux官方中文文档:https://www.redux.org.cn/docs/introduction/CoreConcepts.html react-redux Dome:https://co ...

  2. 深入理解F1-score

    本博客的截图均来自zeya的post:Essential Things You Need to Know About F1-Score | by Zeya | Towards Data Science ...

  3. LeetCode673

    LeetCode每日一题2021.9.20 LeetCode673. 最长递增子序列的个数 思路 在最长上升子序列的转移时,维护一个 cnt 数组,表示 以 i 结尾的最长上升子序列个数 f[i] 表 ...

  4. ApacheCN JavaWeb 译文集 20211017 更新

    使用 Spring5 构建 REST Web 服务 零.前言 一.一些基本知识 二.在 Spring5 中使用 Maven 构建 RESTfulWeb 服务 三.Spring 中的 Flux 和 Mo ...

  5. 布客&#183;ApacheCN 编程/后端/大数据/人工智能学习资源 2020.9

    公告 ApacheCN 项目的最终目标:五年内备份并翻译 Github 上的所有教程(其实快被我们啃完了,剩下的不多了). 警告各位培训班:对 ApacheCN 宣传文章的举报,也将视为对 Apach ...

  6. react 局部更新的关键算法 DOM diff算法

    下图是diff算法结构的详细解析: 要点总结:DIFF算法在执行时有三个维度,分别是Tree DIFF.Component DIFF和Element DIFF,执行时按顺序依次执行,它们的差异仅仅因为 ...

  7. 在IDE中添加widfly依赖

    动机:在IDE中添加widfly依赖 原由:widfly实现了servlet接口,有我们对外交互时所需求的jar包 步骤: 第一步: 找到module依赖的地方 第二步:点击左侧的添加按钮,点击Lib ...

  8. linux上printf出带颜色字体

    转载请注明来源:https://www.cnblogs.com/hookjc/ 统一定义: #define NONE         "\033[m"  #define RED   ...

  9. Ubuntu好用的文本编辑器-SciTE Text Editor

    Ubuntu下除了gedit之外,还可以使用SciTE编辑器,非常方便,安装 sudo apt install scite 不过刚刚装好在中文环境下还是不能够用的,因为会有中文乱码,还有很多设置也不符 ...

  10. 配置phpmemcache扩展,Loaded Configuration File (none)

    首先我来描述问题: 编译安装完php的扩展库memcache后,在php.ini文件中添加了memcache.so的配置文件 extension=/usr/local/php5.6.27/lib/ph ...