1、知识点

  1. """
  2. TFRecords介绍:
  3. TFRecords是Tensorflow设计的一种内置文件格式,是一种二进制文件,它能更好的利用内存,
  4. 更方便复制和移动,为了将二进制数据和标签(训练的类别标签)数据存储在同一个文件中
  5.  
  6. CIFAR-10批处理结果存入tfrecords流程:
  7. 1、构造存储器
  8. a)TFRecord存储器API:tf.python_io.TFRecordWriter(path) 写入tfrecords文件
  9. 参数:
  10. path: TFRecords文件的路径
  11. return:写文件
  12. 方法:
  13. write(record):向文件中写入一个字符串记录
  14. record:字符串为一个序列化的Example,Example.SerializeToString()
  15. close():关闭文件写入器
  16.  
  17. 2、构造每一个样本的Example协议块
  18. a)tf.train.Example(features=None)写入tfrecords文件
  19. features:tf.train.Features类型的特征实例
  20. return:example格式协议块
  21.  
  22. b)tf.train.Features(feature=None)构建每个样本的信息键值对
  23. feature:字典数据,key为要保存的名字,
  24. value为tf.train.Feature实例
  25. return:Features类型
  26.  
  27. c)tf.train.Feature(**options)
  28. **options:例如
  29. bytes_list=tf.train.BytesList(value=[Bytes])
  30. int64_list=tf.train.Int64List(value=[Value])
  31. 数据类型:
  32. tf.train.Int64List(value=[Value])
  33. tf.train.BytesList(value=[Bytes])
  34. tf.train.FloatList(value=[value])
  35.  
  36. 3、写入序列化的Example
  37. writer.write(example.SerializeToString())
  38.  
  39. 报错:
  40. 1、ValueError: Protocol message Feature has no "Bytes_list" field.
  41. 因为没有Bytes_list属性字段,只有bytes_list字段
  42.  
  43. 读取tfrecords流程:
  44. 1、构建文件队列
  45. file_queue = tf.train.string_input_producer([FLAGS.cifar_tfrecords])
  46. 2、构造TFRecords阅读器
  47. reader = tf.TFRecordReader()
  48. 3、解析Example,获取数据
  49. a) tf.parse_single_example(serialized,features=None,name=None)解析TFRecords的example协议内存块
  50. serialized:标量字符串Tensor,一个序列化的Example
  51. features:dict字典数据,键为读取的名字,值为FixedLenFeature
  52. return:一个键值对组成的字典,键为读取的名字
  53. b)tf.FixedLenFeature(shape,dtype) 类型只能是float32,int64,string
  54. shape:输入数据的形状,一般不指定,为空列表
  55. dtype:输入数据类型,与存储进文件的类型要一致
  56. 4、转换格式,bytes解码
  57. image = tf.decode_raw(features["image"],tf.uint8)
  58. #固定图像大小,有利于批处理操作
  59. image_reshape = tf.reshape(image,[self.height,self.width,self.channel])
  60. label = tf.cast(features["label"],tf.int32)
  61. 5、批处理
  62. image_batch , label_batch = tf.train.batch([image_reshape,label],batch_size=5,num_threads=1,capacity=20)
  63.  
  64. 报错:
  65. 1、ValueError: Shape () must have rank at least 1
  66.  
  67. """

2、代码

  1. # coding = utf-8
  2. import tensorflow as tf
  3. import os
  4.  
  5. FLAGS = tf.app.flags.FLAGS
  6. tf.app.flags.DEFINE_string("cifar_dir","./cifar10/", "文件的目录")
  7. tf.app.flags.DEFINE_string("cifar_tfrecords", "./tfrecords/cifar.tfrecords", "存进tfrecords的文件")
  8. class CifarRead(object):
  9. """
  10. 完成读取二进制文件,写进tfrecords,读取tfrecords
  11. """
  12. def __init__(self,file_list):
  13. self.file_list = file_list
  14. #图片属性
  15. self.height = 32
  16. self.width = 32
  17. self.channel = 3
  18.  
  19. #二进制字节
  20. self.label_bytes = 1
  21. self.image_bytes = self.height*self.width*self.channel
  22. self.bytes = self.label_bytes + self.image_bytes
  23.  
  24. def read_and_encode(self):
  25. """
  26. 读取二进制文件,并进行解码操作
  27. :return:
  28. """
  29. #1、创建文件队列
  30. file_quque = tf.train.string_input_producer(self.file_list)
  31. #2、创建阅读器,读取二进制文件
  32. reader = tf.FixedLengthRecordReader(self.bytes)
  33. key, value = reader.read(file_quque)#key为文件名,value为文件内容
  34. #3、解码操作
  35. label_image = tf.decode_raw(value,tf.uint8)
  36.  
  37. #分割图片和标签数据, tf.cast(),数据类型转换 tf.slice()tensor数据进行切片
  38. label = tf.cast(tf.slice(label_image, [0], [self.label_bytes]), tf.int32)
  39. image = tf.slice(label_image,[self.label_bytes],[self.image_bytes])
  40.  
  41. #对图像进行形状改变
  42. image_reshape = tf.reshape(image,[self.height,self.width,self.channel])
  43.  
  44. # 4、批处理操作
  45. image_batch , label_batch = tf.train.batch([image_reshape,label],batch_size=5,num_threads=1,capacity=20)
  46. print(image_batch,label_batch)
  47. return image_batch,label_batch
  48.  
  49. def write_ro_tfrecords(self,image_batch,label_batch):
  50. """
  51. 将读取的二进制文件写入 tfrecords文件中
  52. :param image_batch: 图像 (32,32,3)
  53. :param label_batch: 标签
  54. :return:
  55. """
  56. # 1、构造存储器
  57. writer = tf.python_io.TFRecordWriter(FLAGS.cifar_tfrecords)
  58.  
  59. #循环写入
  60. for i in range(5):
  61. image = image_batch[i].eval().tostring()
  62. label = int(label_batch[i].eval()[0])
  63. # 2、构造每一个样本的Example
  64. example = tf.train.Example(features=tf.train.Features(feature={
  65. "image":tf.train.Feature(bytes_list = tf.train.BytesList(value = [image])) ,
  66. "label":tf.train.Feature(int64_list = tf.train.Int64List(value = [label])) ,
  67. }))
  68.  
  69. # 3、写入序列化的Example
  70. writer.write(example.SerializeToString())
  71.  
  72. #关闭流
  73. writer.close()
  74. return None
  75.  
  76. def read_from_tfrecords(self):
  77. """
  78. 从tfrecords文件读取数据
  79. :return:
  80. """
  81. #1、构建文件队列
  82. file_queue = tf.train.string_input_producer([FLAGS.cifar_tfrecords])
  83. #2、构造TFRecords阅读器
  84. reader = tf.TFRecordReader()
  85. key , value = reader.read(file_queue)
  86. #3、解析Example
  87. features = tf.parse_single_example(value,features={
  88. "image":tf.FixedLenFeature([],tf.string),
  89. "label":tf.FixedLenFeature([],tf.int64)
  90. })
  91. #4、解码内容, 如果读取的内容格式是string需要解码, 如果是int64,float32不需要解码
  92. image = tf.decode_raw(features["image"],tf.uint8)
  93. #固定图像大小,有利于批处理操作
  94. image_reshape = tf.reshape(image,[self.height,self.width,self.channel])
  95. label = tf.cast(features["label"],tf.int32)
  96.  
  97. #5、批处理
  98. image_batch , label_batch = tf.train.batch([image_reshape,label],batch_size=5,num_threads=1,capacity=20)
  99. return image_batch,label_batch
  100.  
  101. if __name__ == '__main__':
  102. #################二进制文件读取###############
  103. # file_name = os.listdir(FLAGS.cifar_dir)
  104. # file_list = [os.path.join(FLAGS.cifar_dir, file) for file in file_name if file[-3:] == "bin"]
  105. # cf = CifarRead(file_list)
  106. # image_batch, label_batch = cf.read_and_encode()
  107. # with tf.Session() as sess:
  108. # # 创建协调器
  109. # coord = tf.train.Coordinator()
  110. # # 开启线程
  111. # threads = tf.train.start_queue_runners(sess, coord=coord)
  112. #
  113. # print(sess.run([image_batch, label_batch]))
  114. # # 回收线程
  115. # coord.request_stop()
  116. # coord.join(threads)
  117. #############################################
  118.  
  119. #####二进制文件读取,并写入tfrecords文件######
  120. # file_name = os.listdir(FLAGS.cifar_dir)
  121. # file_list = [os.path.join(FLAGS.cifar_dir, file) for file in file_name if file[-3:] == "bin"]
  122. # cf = CifarRead(file_list)
  123. # image_batch, label_batch = cf.read_and_encode()
  124. # with tf.Session() as sess:
  125. # # 创建协调器
  126. # coord = tf.train.Coordinator()
  127. # # 开启线程
  128. # threads = tf.train.start_queue_runners(sess, coord=coord)
  129. # #########保存文件到tfrecords##########
  130. # cf.write_ro_tfrecords(image_batch, label_batch)
  131. # #########保存文件到tfrecords##########
  132. #
  133. # print(sess.run([image_batch, label_batch]))
  134. # # 回收线程
  135. # coord.request_stop()
  136. # coord.join(threads)
  137. ##############################################
  138.  
  139. #############从tfrecords文件读取###############
  140. file_name = os.listdir(FLAGS.cifar_dir)
  141. file_list = [os.path.join(FLAGS.cifar_dir, file) for file in file_name if file[-3:] == "bin"]
  142. cf = CifarRead(file_list)
  143. image_batch, label_batch = cf.read_from_tfrecords()
  144. with tf.Session() as sess:
  145. # 创建协调器
  146. coord = tf.train.Coordinator()
  147. # 开启线程
  148. threads = tf.train.start_queue_runners(sess, coord=coord)
  149.  
  150. print(sess.run([image_batch, label_batch]))
  151. # 回收线程
  152. coord.request_stop()
  153. coord.join(threads)
  154. ##############################################

tensorflow二进制文件读取与tfrecords文件读取的更多相关文章

  1. JXLS使用方法(文件上传读取)xlsx文件读取

    1.官方文档:http://jxls.sourceforge.net/reference/reader.html 2.demo git地址:https://bitbucket.org/leonate/ ...

  2. TensorFlow中数据读取之tfrecords

    关于Tensorflow读取数据,官网给出了三种方法: 供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据. 从文件读取数据: 在TensorFlow ...

  3. 深度学习tensorflow实战笔记(2)图像转换成tfrecords和读取

    1.准备数据 首选将自己的图像数据分类分别放在不同的文件夹下,比如新建data文件夹,data文件夹下分别存放up和low文件夹,up和low文件夹下存放对应的图像数据.也可以把up和low文件夹换成 ...

  4. Tensorflow读写TFRecords文件

    在使用slim之类的tensorflow自带框架的时候一般默认的数据格式就是TFRecords,在训练的时候使用TFRecords中数据的流程如下:使用input pipeline读取tfrecord ...

  5. 安全研究 | Jenkins 任意文件读取漏洞分析

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云鼎实验室 发表于云+社区专栏 一.漏洞背景 漏洞编号:CVE-2018-1999002 漏洞等级:高危 Jenkins 7 月 18 ...

  6. node基础:文件系统-文件读取

    node的文件读取主要分为同步读取.异步读取,常用API有fs.readFile.fs.readFileSync.还有诸如更底层的fs.read,以及数据流(stream),后面再总结下咯~ 直接上简 ...

  7. HDFS数据流-剖析文件读取及写入

    HDFS数据流-剖析文件读取及写入 文件读取 1. 客户端通过调用FileSystem对象的open方法来打开希望读取的文件,对于HDFS来说,这个对象是分布式文件系统的一个实例.2. Distrib ...

  8. H5C3--语义标签以及语义标签IE8兼容,表单元素新属性,度量器,自定义属性,dataList,网络监听,文件读取

    HTML5新增标签以及HTML5新增的api     1.H5并不是新的语言,而是html语言的第五次重大修改--版本     2.支持:所有的主流浏览器都支持h5.(chrome,firefox,s ...

  9. 【学习笔记】tensorflow文件读取

    目录 文件读取 文件队列构造 文件阅读器 文件内容解码器 开启线程操作 管道读端批处理 CSV文件读取案例 先看下文件读取以及读取数据处理成张量结果的过程: 一般数据文件格式有文本.excel和图片数 ...

随机推荐

  1. 《python解释器源码剖析》第3章--python中的str对象

    3.0 序 我们知道python中的字符串属于变长对象,当然和int也是一样,底层的结构体实例所维护的数据的长度,在对象没有定义的时候是不知道的.当然如果是python2的话,底层PyIntObjec ...

  2. 【原创】马哥 文本三剑客之awk

    命令 awk 全称: man搜索: 简述 基本用法 选项 用法与实验 print 打印 (1)(2)(3) 变量 1.内建变量 FS与OFS RS与ORS NR与FNR NF ARGC与ARGC 2. ...

  3. 手机 简易浏览器 WebView的基本使用 返回 缓存 进度条

    public class MainActivity extends AppCompatActivity { private WebView webView; private String url = ...

  4. 【网络协议】动态主机配置协议DHCP

    动态主机配置协议DHCP 当某组织获得一块地址后,就可以为本组织内的主机或者路由器分配IP地址.这个分配工作可以由系统管理员手动通过网络管理工具来完成.也可以由动态主机配置协议(Dynamic Hos ...

  5. redis-数据淘汰策略

    博客标题:Redis的数据淘汰策略及相关注意事项 配置redis.conf中的maxmemory这个值来开启内存淘汰功能 volatile-lru:从已设置过期时间的数据集(server.db[i]. ...

  6. 【CF335 E】Counting Skyscrapers

    题意 有一排高楼,每一栋高楼有一个正整数高度,高度为 \(i\) 的概率为 \(2^{-i}\).一栋楼的每层从下往上依次编号为 \(0,1,2,\cdots,i-1\). 为了出题,大楼之间安装了溜 ...

  7. Tampermonkey油猴脚本管理插件-最强浏览器插件的安装使用全攻略

      对于接触过谷歌浏览器插件的“玩家”们来说,应该没有人没听说过Tampermonkey用户脚本管理器,也就是中文所说的“油猴”这个chrome插件了. 油猴号称全商店最强的浏览器插件绝非浪得虚名,一 ...

  8. 本地文件上传到gitlab

    1.本地创建目录gbdt_model 2.进入文件目录,在文件中点击鼠标右键选择bash控制台进入 3.运行git init 命令,文件中会多出一个.git 命令 4. git commit -m & ...

  9. 如何在vue项目中引入elementUI组件

    个人博客同步文章 https://mr-houzi.com/2018/02/... 前提:已经安装好Vue 初始化vue vue init webpack itemname 运行初始化demo 运行一 ...

  10. Java程序中使用 Jsoup 爬虫( 简单示例 )

    一.maven项目里pom添加jsoup依赖 <dependency> <groupId>org.jsoup</groupId> <artifactId> ...