TFRecord 是 TensorFlow 官方推荐的二进制数据存储格式,主要用于高效地存储和读取大规模数据(尤其是训练数据)。它的核心结构和特点如下:
1. 格式组成
二进制记录序列:每个记录由四部分构成:
长度(记录的数据字节数)CRC 校验码(用于校验长度是否正确)实际数据(序列化后的字节块)数据 CRC 校验码(用于校验数据完整性)。
2. 数据表示方式
数据通常以 协议缓冲消息的形式存储。
tf.train.Example 是一个键‑值映射,其中:
Example
键 是字符串(特征名)值 是 ,支持三种数据类型:
tf.train.Feature
(字符串或二进制数据)
bytes_list(浮点数)
float_list(整型、布尔值等)。
int64_list
3. 为什么使用 TFRecord?
高效 I/O:二进制格式加载快,适合流式读取大数据集。内存友好:不必一次性将所有数据加载到内存。统一封装:可将样本特征(如图像、标签、文本)全部封装在一个文件中,避免多文件管理麻烦。与 TensorFlow 生态紧密集成: 可直接读取,并配合
tf.data.TFRecordDataset 解析。
tf.io.parse_single_example
4. 基本使用方法
写入(使用 ):
tf.io.TFRecordWriter
with tf.io.TFRecordWriter("data.tfrecord") as writer:
example = tf.train.Example(
features=tf.train.Features(
feature={
"image": tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_bytes])),
"label": tf.train.Feature(int64_list=tf.train.Int64List(value=[label]))
}
)
)
writer.write(example.SerializeToString())
读取(使用 ):
tf.data.TFRecordDataset
dataset = tf.data.TFRecordDataset("data.tfrecord")
def _parse_fn(example_proto):
feature_description = {
"image": tf.io.FixedLenFeature([], tf.string),
"label": tf.io.FixedLenFeature([], tf.int64)
}
return tf.io.parse_single_example(example_proto, feature_description)
dataset = dataset.map(_parse_fn)
5. 适用场景
图像分类、目标检测等需要大量样本的训练任务。需要跨平台、跨语言序列化数据的场景(基于 Protocol Buffers)。
TFRecord 通过二进制记录和 Protocol Buffers 的结合,为 TensorFlow 提供了高效、可扩展的数据存储方案,特别适合处理训练、评估中使用的大规模数据集。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...