tfrecord格式的内容解析及样例

TFRecord是谷歌推荐的二进制文件格式,适用于存储多种格式的数据。本文深入解析TFRecord的内部结构,包括example、tf.train.Features及tf.train.Feature的使用方法,并提供实例说明如何存储不同类型的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TFRecord 是谷歌推荐的一种二进制文件格式,理论上它可以保存任何格式的信息。

tfreocrd的核心是其包含一系列的example,每个example可以认为是一条样本。example是tensorflow中的对象类型,用法是tf.train.example。

tf.train.example 只有一个属性features。features也是tensorflow的一个对象类型tf.train.Features,tf.train.Features也只有一个属性feature(后面还会出现一个feature,为了区分,tf.train.Features的属性feature会写成“属性feature”)。属性feature本质上是一个dict,该dict的内容是{"string": tf.train.Feature}。其中string表示特征名。tf.train.Feature同样是tensorflow的一个对象,tf.train.Feature的一个类就表示一个特征,特征的值就保存在tf.train.Feature 中。

对于类型繁多的特征值,tf.train.Feature是怎么保存的呢?tf.train.Feature有三个属性:

byte_list,用于保存string类型的特征值,比如:某人7天内浏览过的店铺id组成的list,或者某人所在的城市,如果只有一个值那就是长度是1的list。

属性byte_list的格式应该是 tf.train.BytesList,tf.train.BytesList只接受bytes类型的入参,不接受string类型。应该注意的是

我们定义一个bytes的时候,注意中英文,例如name = b"taobao"  是合法的,但是 name = b"淘宝" 是非法的,因为用b"string"的方法只接受ascii码的字符串。如果有汉语可以用 name = u'淘宝'.encode('utf-8') 来定义。

float_list :用于保存float类型的特征值,是一个list,类型是tf.train.FloatList

int64_list:用于保存int,long,boolean类型的特征值,是一个list,类型是tf.train.Int64List

综合上面的说法

 

下面是一个样例:

用户A,年龄:25,城市:北京,最近7天中打开淘宝的天数:4,最近7天在淘宝上消费:289.4元。,最近7天浏览过的淘宝店铺id:123,456,789。

把上面的信息做成一条样本就是

value_city = u"北京".encode('utf-8')   # 城市
value_use_day = 7                      #最近7天打开淘宝次数
value_pay = 289.4                      # 最近7 天消费金额
value_poi = [b"123", b"456", b"789"]   #最近7天浏览电铺

'''
下面生成ByteList,Int64List和FloatList
'''
bl_city = tf.train.BytesList(value = [value_city])  ## tf.train.ByteList入参是list,所以要转为list
il_use_day = tf.train.Int64List(value = [value_use_day])
fl_pay = tf.train.FloatList(value = [value_pay])
bl_poi = tf.train.BytesList(value = value_poi)

'''
下面生成tf.train.Feature
'''
feature_city = tf.train.Feature(bytes_list = bl_city)
feature_use_day = tf.train.Feature(int64_list = il_use_day)
feature_pay = tf.train.Feature(float_list = fl_pay)
feature_poi = tf.train.Feature(bytes_list = bl_poi)
'''
下面定义tf.train.Features
'''
feature_dict = {"city":feature_city,"use_day":feature_use_day,"pay":feature_pay,"poi":feature_poi}
features = tf.train.Features(feature = feature_dict)
'''
下面定义tf.train.example
'''
example = tf.train.Example(features = features)
print(example)

上面的代码的运行结果为:

features {
  feature {
    key: "city"
    value {
      bytes_list {
        value: "\345\214\227\344\272\254"
      }
    }
  }
  feature {
    key: "pay"
    value {
      float_list {
        value: 289.3999938964844
      }
    }
  }
  feature {
    key: "poi"
    value {
      bytes_list {
        value: "123"
        value: "456"
        value: "789"
      }
    }
  }
  feature {
    key: "use_day"
    value {
      int64_list {
        value: 7
      }
    }
  }
}

把若干个example组合起来,然后转化为二进制文件,就是tfrecord。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值