tensorflow之tfrecords--一种数据格式

本文介绍了TensorFlow中的tfrecords文件格式,它是一种二进制编码格式,用于高效存储和处理数据。文章详细讲解了如何将数据转换为tfrecords以及如何读取tfrecords文件,包括创建和解析Example协议内存块的步骤,并提供了相关的代码示例。
摘要由CSDN通过智能技术生成

d# 一、tfrecords是什么
tfrecords是一种二进制编码的文件格式,tensorflow专用。
能将任意数据转换为tfrecords。
更好的利用内存,更方便复制和移动,并且不需要单独的标签文件。

二、使用

1、 将数据保存为tfrecords

TFRecords文件包含了tf.train.Example协议内存块(protocol buffer)(协议内存块包含了字段 Features)。我们可以写一段代码获取你的数据, 将数据填入到Example协议内存块(protocol buffer),将协议内存块序列化为一个字符串, 并且通过tf.python_io.TFRecordWriter写入到TFRecords文件。

流程:
1. 将数据填入example protocol buffer
2. 将protocol buffer序列化为一个字符串
3. 通过tf.python_io.TFRecordWriter将字符串写入TFRecords文件


# 将数据转化成对应的属性
def _bytes_feature(value):
    # 字符串列表类型作为feature的value
    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
def _int64_feature(value):
    # 整数列表类型作为feature的value
    return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))
def _float_feature(value):
    return tf.train.Feature(float_list=tf.train.FloatList(value=[value]))

writer=tf.python_io.TFRecordWriter('filename')      # 初始化一个writer
example=tf.train.Example(
    features=tf.train.Features(
        feature={
            "name": _bytes_feature('xianyi'),
            "age": _int64_feature(23)
        }
    )
)                                                   # 填充数据,example填充features,features填充feature,feature填写key和value,value是tf.train.Feature(类型=tf.train.类型(value=[value]))
writer.write(example.SerializeToString())           # 将序列化的example写入文件

这个写入example的过程有点复杂。
Example,初始化为tf.train.Example()
包含字段features=tf.train.Features()
字段features包含一个或多个: feature={"key": tf.train.Feature()}
feature是基于key-value对的存储,key是字符串,其映射到的是value 包含3种数据类型:
1. BytesList: 字符串列表: tf.train.BytesList(value=[value])
2. FloatList: 浮点数列表tf.train.FloatList()
3. Int64List: 64位整数列表tf.train.Int64List()
对于图片的numpy数组,可以.tostring之后存到BytesList,可以tf.gfile.FastGFile读入成bytes存到BytesList,可以.flatten后存到FloatList

Example中有几个一致性规则需要注意:
1. 如果一个examplefeature K的数据类型是T,那么所有其他的所有feature K都应该是这个数据类型
2. feature Kvalue listitem个数可能在不同的example中是不一样多的,这个取决于你的需求
3. 如果在一个example中没有feature k,那么如果在解析的时候指定一个默认值的话,那么将会返回一个默认值
4. 如果一个feature k 不包含任何的value值,那么将会返回一个空的tensor而不是默认值

一个example的例子:
features {
    feature {
        key: "age"
        value { float_list {
            value: 29.0
       }}
     }
    feature {
        key: "movie"
        value { bytes_list {
            value: "The Shawshank Redemption"
            value: "Fight Club"
       }}
     }
    feature {
        key: "
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值