为什么我的 TFRecord 文件比 csv 大很多?

2024-01-07

我一直认为作为二进制格式,TFRecord https://www.tensorflow.org/api_guides/python/python_io#tfrecords_format_details与人类可读的 csv 相比,占用的空间更少。但当我尝试比较它们时,我发现事实并非如此。

例如我在这里创建一个num_rows X 10矩阵与num_rows标签并将其另存为 csv。我通过将其保存到 TFRecors 来执行相同的操作:

import pandas as pd
import tensorflow as tf
from random import randint

num_rows = 1000000
df = pd.DataFrame([[randint(0,300) for r in xrange(10)] + [randint(0, 1)] for i in xrange(num_rows)])

df.to_csv("data/test.csv", index=False, header=False)

writer = tf.python_io.TFRecordWriter('data/test.bin')
for _, row in df.iterrows():
    arr = list(row)
    features, label = arr[:-1], arr[-1]
    example = tf.train.Example(features=tf.train.Features(feature={
        'features' : tf.train.Feature(int64_list=tf.train.Int64List(value=features)),
        'label':     tf.train.Feature(int64_list=tf.train.Int64List(value=[label])),
    }))
    writer.write(example.SerializeToString())
writer.close()

创建二进制文件不仅比 csv 花费更多的时间(2 秒 VS 1 分 50 秒),而且使用的空间几乎多出 2 倍(38Mb VS 67.7Mb)。


我做得正确吗?如何使输出文件更小(锯TFRecord压缩类型 https://www.tensorflow.org/api_docs/python/tf/python_io/TFRecordCompressionType),但是我还能做些什么吗?尺寸更大的原因是什么?


Vijay 对 int64 的评论有道理,但仍然不能回答所有问题。 Int64 消耗 8 个字节,因为我将数据存储在 csv 中,整数的字符串表示形式的长度应该是 8。所以如果我这样做df = pd.DataFrame([[randint(1000000,99999999) for r in xrange(10)] for i in xrange(num_rows)])我还是买了一个稍微大一点的尺寸。现在是 90.9Mb VS 89.1Mb。除此之外,csv 为每个整数之间的每个逗号存储 1 个字节。


文件较大的事实是由于 TFRecords 每行的开销,特别是每次都存储标签名称的事实。

在您的示例中,如果增加特征数量(从 10 个增加到 1000 个),您会发现 tfrecord 文件实际上大约是 csv 大小的一半。

此外,整数存储在 64 位上的事实最终是无关紧要的,因为序列化使用“varint”编码,该编码取决于整数的值,而不是其初始编码。以上面的示例为例,不要使用 0 到 300 之间的随机值,而是使用常量值 300:您将看到文件大小增加。

请注意,用于编码的字节数并不完全是整数本身的字节数。因此,值 255 仍需要两个字节,但值 127 将占用一个字节。有趣的是,负值会带来巨大的损失:无论如何,都需要 10 个字节的存储空间。

值和存储需求的对应关系可以在protobufs函数中找到_SignedVarintSize https://github.com/google/protobuf/blob/2f4489a3e504e0a4aaffee69b551c6acc9e08374/python/google/protobuf/internal/encoder.py#L96.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 TFRecord 文件比 csv 大很多? 的相关文章

随机推荐