tensorflow二进制文件读取与tfrecords文件读取
1、知识点
"""
TFRecords介绍:
TFRecords是Tensorflow设计的一种内置文件格式,是一种二进制文件,它能更好的利用内存,
更方便复制和移动,为了将二进制数据和标签(训练的类别标签)数据存储在同一个文件中 CIFAR-10批处理结果存入tfrecords流程:
1、构造存储器
a)TFRecord存储器API:tf.python_io.TFRecordWriter(path) 写入tfrecords文件
参数:
path: TFRecords文件的路径
return:写文件
方法:
write(record):向文件中写入一个字符串记录
record:字符串为一个序列化的Example,Example.SerializeToString()
close():关闭文件写入器 2、构造每一个样本的Example协议块
a)tf.train.Example(features=None)写入tfrecords文件
features:tf.train.Features类型的特征实例
return:example格式协议块 b)tf.train.Features(feature=None)构建每个样本的信息键值对
feature:字典数据,key为要保存的名字,
value为tf.train.Feature实例
return:Features类型 c)tf.train.Feature(**options)
**options:例如
bytes_list=tf.train.BytesList(value=[Bytes])
int64_list=tf.train.Int64List(value=[Value])
数据类型:
tf.train.Int64List(value=[Value])
tf.train.BytesList(value=[Bytes])
tf.train.FloatList(value=[value]) 3、写入序列化的Example
writer.write(example.SerializeToString()) 报错:
1、ValueError: Protocol message Feature has no "Bytes_list" field.
因为没有Bytes_list属性字段,只有bytes_list字段 读取tfrecords流程:
1、构建文件队列
file_queue = tf.train.string_input_producer([FLAGS.cifar_tfrecords])
2、构造TFRecords阅读器
reader = tf.TFRecordReader()
3、解析Example,获取数据
a) tf.parse_single_example(serialized,features=None,name=None)解析TFRecords的example协议内存块
serialized:标量字符串Tensor,一个序列化的Example
features:dict字典数据,键为读取的名字,值为FixedLenFeature
return:一个键值对组成的字典,键为读取的名字
b)tf.FixedLenFeature(shape,dtype) 类型只能是float32,int64,string
shape:输入数据的形状,一般不指定,为空列表
dtype:输入数据类型,与存储进文件的类型要一致
4、转换格式,bytes解码
image = tf.decode_raw(features["image"],tf.uint8)
#固定图像大小,有利于批处理操作
image_reshape = tf.reshape(image,[self.height,self.width,self.channel])
label = tf.cast(features["label"],tf.int32)
5、批处理
image_batch , label_batch = tf.train.batch([image_reshape,label],batch_size=5,num_threads=1,capacity=20) 报错:
1、ValueError: Shape () must have rank at least 1 """
2、代码
# coding = utf-8
import tensorflow as tf
import os FLAGS = tf.app.flags.FLAGS
tf.app.flags.DEFINE_string("cifar_dir","./cifar10/", "文件的目录")
tf.app.flags.DEFINE_string("cifar_tfrecords", "./tfrecords/cifar.tfrecords", "存进tfrecords的文件")
class CifarRead(object):
"""
完成读取二进制文件,写进tfrecords,读取tfrecords
"""
def __init__(self,file_list):
self.file_list = file_list
#图片属性
self.height = 32
self.width = 32
self.channel = 3 #二进制字节
self.label_bytes = 1
self.image_bytes = self.height*self.width*self.channel
self.bytes = self.label_bytes + self.image_bytes def read_and_encode(self):
"""
读取二进制文件,并进行解码操作
:return:
"""
#1、创建文件队列
file_quque = tf.train.string_input_producer(self.file_list)
#2、创建阅读器,读取二进制文件
reader = tf.FixedLengthRecordReader(self.bytes)
key, value = reader.read(file_quque)#key为文件名,value为文件内容
#3、解码操作
label_image = tf.decode_raw(value,tf.uint8) #分割图片和标签数据, tf.cast(),数据类型转换 tf.slice()tensor数据进行切片
label = tf.cast(tf.slice(label_image, [0], [self.label_bytes]), tf.int32)
image = tf.slice(label_image,[self.label_bytes],[self.image_bytes]) #对图像进行形状改变
image_reshape = tf.reshape(image,[self.height,self.width,self.channel]) # 4、批处理操作
image_batch , label_batch = tf.train.batch([image_reshape,label],batch_size=5,num_threads=1,capacity=20)
print(image_batch,label_batch)
return image_batch,label_batch def write_ro_tfrecords(self,image_batch,label_batch):
"""
将读取的二进制文件写入 tfrecords文件中
:param image_batch: 图像 (32,32,3)
:param label_batch: 标签
:return:
"""
# 1、构造存储器
writer = tf.python_io.TFRecordWriter(FLAGS.cifar_tfrecords) #循环写入
for i in range(5):
image = image_batch[i].eval().tostring()
label = int(label_batch[i].eval()[0])
# 2、构造每一个样本的Example
example = tf.train.Example(features=tf.train.Features(feature={
"image":tf.train.Feature(bytes_list = tf.train.BytesList(value = [image])) ,
"label":tf.train.Feature(int64_list = tf.train.Int64List(value = [label])) ,
})) # 3、写入序列化的Example
writer.write(example.SerializeToString()) #关闭流
writer.close()
return None def read_from_tfrecords(self):
"""
从tfrecords文件读取数据
:return:
"""
#1、构建文件队列
file_queue = tf.train.string_input_producer([FLAGS.cifar_tfrecords])
#2、构造TFRecords阅读器
reader = tf.TFRecordReader()
key , value = reader.read(file_queue)
#3、解析Example
features = tf.parse_single_example(value,features={
"image":tf.FixedLenFeature([],tf.string),
"label":tf.FixedLenFeature([],tf.int64)
})
#4、解码内容, 如果读取的内容格式是string需要解码, 如果是int64,float32不需要解码
image = tf.decode_raw(features["image"],tf.uint8)
#固定图像大小,有利于批处理操作
image_reshape = tf.reshape(image,[self.height,self.width,self.channel])
label = tf.cast(features["label"],tf.int32) #5、批处理
image_batch , label_batch = tf.train.batch([image_reshape,label],batch_size=5,num_threads=1,capacity=20)
return image_batch,label_batch if __name__ == '__main__':
#################二进制文件读取###############
# file_name = os.listdir(FLAGS.cifar_dir)
# file_list = [os.path.join(FLAGS.cifar_dir, file) for file in file_name if file[-3:] == "bin"]
# cf = CifarRead(file_list)
# image_batch, label_batch = cf.read_and_encode()
# with tf.Session() as sess:
# # 创建协调器
# coord = tf.train.Coordinator()
# # 开启线程
# threads = tf.train.start_queue_runners(sess, coord=coord)
#
# print(sess.run([image_batch, label_batch]))
# # 回收线程
# coord.request_stop()
# coord.join(threads)
############################################# #####二进制文件读取,并写入tfrecords文件######
# file_name = os.listdir(FLAGS.cifar_dir)
# file_list = [os.path.join(FLAGS.cifar_dir, file) for file in file_name if file[-3:] == "bin"]
# cf = CifarRead(file_list)
# image_batch, label_batch = cf.read_and_encode()
# with tf.Session() as sess:
# # 创建协调器
# coord = tf.train.Coordinator()
# # 开启线程
# threads = tf.train.start_queue_runners(sess, coord=coord)
# #########保存文件到tfrecords##########
# cf.write_ro_tfrecords(image_batch, label_batch)
# #########保存文件到tfrecords##########
#
# print(sess.run([image_batch, label_batch]))
# # 回收线程
# coord.request_stop()
# coord.join(threads)
############################################## #############从tfrecords文件读取###############
file_name = os.listdir(FLAGS.cifar_dir)
file_list = [os.path.join(FLAGS.cifar_dir, file) for file in file_name if file[-3:] == "bin"]
cf = CifarRead(file_list)
image_batch, label_batch = cf.read_from_tfrecords()
with tf.Session() as sess:
# 创建协调器
coord = tf.train.Coordinator()
# 开启线程
threads = tf.train.start_queue_runners(sess, coord=coord) print(sess.run([image_batch, label_batch]))
# 回收线程
coord.request_stop()
coord.join(threads)
##############################################
tensorflow二进制文件读取与tfrecords文件读取的更多相关文章
- JXLS使用方法(文件上传读取)xlsx文件读取
1.官方文档:http://jxls.sourceforge.net/reference/reader.html 2.demo git地址:https://bitbucket.org/leonate/ ...
- TensorFlow中数据读取之tfrecords
关于Tensorflow读取数据,官网给出了三种方法: 供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据. 从文件读取数据: 在TensorFlow ...
- 深度学习tensorflow实战笔记(2)图像转换成tfrecords和读取
1.准备数据 首选将自己的图像数据分类分别放在不同的文件夹下,比如新建data文件夹,data文件夹下分别存放up和low文件夹,up和low文件夹下存放对应的图像数据.也可以把up和low文件夹换成 ...
- Tensorflow读写TFRecords文件
在使用slim之类的tensorflow自带框架的时候一般默认的数据格式就是TFRecords,在训练的时候使用TFRecords中数据的流程如下:使用input pipeline读取tfrecord ...
- 安全研究 | Jenkins 任意文件读取漏洞分析
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云鼎实验室 发表于云+社区专栏 一.漏洞背景 漏洞编号:CVE-2018-1999002 漏洞等级:高危 Jenkins 7 月 18 ...
- node基础:文件系统-文件读取
node的文件读取主要分为同步读取.异步读取,常用API有fs.readFile.fs.readFileSync.还有诸如更底层的fs.read,以及数据流(stream),后面再总结下咯~ 直接上简 ...
- HDFS数据流-剖析文件读取及写入
HDFS数据流-剖析文件读取及写入 文件读取 1. 客户端通过调用FileSystem对象的open方法来打开希望读取的文件,对于HDFS来说,这个对象是分布式文件系统的一个实例.2. Distrib ...
- H5C3--语义标签以及语义标签IE8兼容,表单元素新属性,度量器,自定义属性,dataList,网络监听,文件读取
HTML5新增标签以及HTML5新增的api 1.H5并不是新的语言,而是html语言的第五次重大修改--版本 2.支持:所有的主流浏览器都支持h5.(chrome,firefox,s ...
- 【学习笔记】tensorflow文件读取
目录 文件读取 文件队列构造 文件阅读器 文件内容解码器 开启线程操作 管道读端批处理 CSV文件读取案例 先看下文件读取以及读取数据处理成张量结果的过程: 一般数据文件格式有文本.excel和图片数 ...
随机推荐
- centos 7 安装 Git-2.23.0
Git是一个免费的开源 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容. Git 易于学习,占地面积小,具有闪电般的快速性能. 它具有诸如Subversion,CVS,Perforc ...
- 使用 Eclipse 构建的时候会出现 run as 中没有 maven package 选项
注:该方法来自我学习时别人分享的出现问题的解决方法,并没有亲自测试,仅供参考 是因为建的是普通 java 工程,需要把它转换成 maven project. 1.右键工程--maven--Disabl ...
- 在RecyclerView中集成QQ汽泡二
上次已经将GooView集成到RecyclerView当中了[http://www.cnblogs.com/webor2006/p/7787511.html],但是目前还有很多问题,下面先来运行看一下 ...
- Python:多进程。
参考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017628290184064 Python程序实现多进程(multiprocessing) ...
- 二叉树的相关定义及BST的实现
一.树的一些概念 树,子树,节点,叶子(终端节点),分支节点(分终端节点): 节点的度表示该节点拥有的子树个数,树的度是树内各节点度的最大值: 子节点(孩子),父节点(双亲),兄弟节点,祖先,子孙,堂 ...
- 第十一章 前端开发-css
第十一章 前端开发-css 1.1.0 css介绍 css是指层叠样式表(Cascading Style Sheets),样式定义如何显示html元素,样式通常又会存在于样式表中. css优势: 内容 ...
- 记一次Python导包经历
最近由于需要写一个脚本调用另一个文件里面的一个方法,试了很久都导包失败,特此记录一下 问题背景 1)脚本文件为send_reward.py,要调用public_model_func.py里面的一个类方 ...
- 服务消费(LoadBalancerClient、Ribbon、Feign)
转自:https://www.jianshu.com/p/562045489d9d 4.1使用LoadBalancerClient 在Spring Cloud Commons中提供了大量的与服务治理相 ...
- HDU 6055 - Regular polygon | 2017 Multi-University Training Contest 2
/* HDU 6055 - Regular polygon [ 分析,枚举 ] 题意: 给出 x,y 都在 [-100, +100] 范围内的 N 个整点,问组成的正多边形的数目是多少 N <= ...
- 【Python之路】特别篇--Python文件操作
文件操作 open函数,该函数用于文件处理 操作文件时,一般需要经历如下步骤: (1)打开文件 (2)操作文件 一.打开文件 文件句柄 = open('文件路径', '模式','编码') 打开文件时, ...