为了高效地读取数据,比较有帮助的一种做法是对数据进行序列化并将其存储在一组可线性读取的文件(每个文件 100-200MB)中。这尤其适用于通过网络进行流式传输的数据。这种做法对缓冲任何数据预处理也十分有用。TFRecord 格式是一种用于存储二进制记录序列的简单格式。
1. 写入TFRecord
- 特征数据
feature_data = {
'name': 'xiaoming',
'age': 20,
'height': 172.8,
'scores': [[120,130,140],[82,95,43]]
}
tf.Example
消息(或 protobuf)是一种灵活的消息类型,表示{"string": value}
映射。它专为 TensorFlow 而设计,并被用于 TFX 等高级 API。
example_proto = tf.train.Example(
features=tf.train.Features(feature={
# 将标准 TensorFlow 类型转换为兼容 tf.Example 的 tf.train.Feature
'name': tf.train.Feature(bytes_list=tf.train.BytesList(value=[b'xiaoming'])),
'age': tf.train.Feature(int64_list=tf.train.Int64List(value=[20])),
'height': tf.train.Feature(float_list=tf.train.FloatList(value=[172.8])),
'scores': tf.train.Feature(bytes_list=tf.train.BytesList(
# 要处理非标量特征,最简单的方法是使用 tf.io.serialize_tensor 将张量转换为二进制字符串
value=[tf.io.serialize_tensor([[120,130,140],[82,95,43]]).numpy()]))
})
)
""" 输出结果:
features {
feature {
key: "age"
value {
int64_list {
value: 20
}
}
}
feature {
key: "height"
value {
float_list {
value: 172.8000030517578
}
}
}
feature {
key: "name"
value {
bytes_list {
value: "xiaoming"
}
}
}
feature {
key: "scores"
value {
bytes_list {
value: "