TFRecoders

TFRecords文件读写

https://blog.csdn.net/u012222949/article/details/72875281/
https://blog.csdn.net/chengshuhao1991/article/details/78656724

  1. 统一不同输入文件的框架
  2. 更好的利用内存,更方便复制和移动(TFRecord压缩的二进制文件, protocal buffer序列化)
  3. 用于将二进制数据和标签(训练的类别标签)数据存储在同一个文件

Protocol Buffer 协议缓冲区

  1. tfrecord文件包含了tf.train.Example 协议缓冲区(protocol buffer,协议缓冲区包含了特征 Features)。可以写一段代码获取数据, 将数据填入到Example协议缓冲区(protocol buffer),将协议缓冲区序列化为一个字符串, 并且通过tf.python_io.TFRecordWriter class写入到TFRecords文件。
  2. 内部使用**“Protocol Buffer”二进制数据编码**方案,只要生成一次TFRecord,之后的数据读取和加工处理的效率都会得到提高。
    输入函数:数据集导入,返回两个对象(字典、包含一个或多个标签的tensor)

建立TFRecord存储器

write

向文件中写入一个字符串(序列化的Example)记录(即一个样本)。
序列化的Example,通过Example.SerializeToString()来实现,作用是将Example中的map压缩为二进制,节约大量空间。

# 创建一个writer来写 TFRecords 文件
writer = tf.python_io.TFRecordWriter(train_filename)

read

# 定义一个 reader ,读取下一个 record
reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)

# 解析读入的一个record
features = tf.parse_single_example(serialized_example, features=feature)

Example协议块

tf.train.Example(features = None)

写入tfrecords文件
一般用于数值、图像等有固定大小的数据,同时使用tf.train.Feature指定每个记录各特征的名称和数据类型

tf.train.SequenceExample

一般用于文本、时间序列等没有固定长度大小的数据

tf.train.Features(feature = None)

构造每个样本的信息键值对

tf.train.Feature(**options)

options可以选择如下三种格式数据:
bytes_list = tf.train.BytesList(value = [Bytes])
int64_list = tf.train.Int64List(value = [Value])
float_list = tf.trian.FloatList(value = [Value])

读取

数据读取四种方式:

  1. 预先把所有数据加载进内存
  2. 在每轮训练中使用原生Python代码读取一部分数据,然后使用feed_dict输入到计算图
  3. 利用Threading和Queues从TFRecord中分批次读取数据
  4. 使用Dataset API

tf.parse_single_example(serialized,features=None,name= None)

解析一个单一的Example原型
serialized : 标量字符串的Tensor,一个序列化的Example,文件经过文件阅读器之后的value
features :字典数据,key为读取的名字,value为FixedLenFeature
return : 一个键值对组成的字典,键为读取的名字

tf.FixedLenFeature(shape,dtype)

shape : 输入数据的形状,一般不指定,为空列表
dtype : 输入数据类型,与存储进文件的类型要一致,类型只能是float32,int 64, string
return : 定长的Tensor (即使有零的部分也存储)

tf.VarLenFeature()

返回的是一个不定长的sparse tensor,用于处理可变长度的输入,在处理c t c 问题时,会用到tf.VallenFeature解析存储在tfrecord中的label。

tf.data.TFRecordDataset(input_file) # 定义来源:导入数据集(以TFRecord格式存储)

协议块

用于描述机器学习模型功能的协议消息训练或推理。

有三种基本的功能类型:字节,float,int64

功能包含可能包含零个或多个值的列表(基本值BytesList,FloatList,Int64List)。

功能按名称分为类别和功能消息,包含从名称到功能的映射。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值