有没有办法获取 TFRecord 文件的大小和其中一个示例的大小?

is there a way to get the size of TFRecord file and the size of one Example in it?

因为我想获取一个TFRecord文件中Examples的个数,所以我目前使用的方法是

len([x for x in tf.python_io.tf_record_iterator(tf_record_file)])

但是速度很慢。 我的 TFRecord 文件中的所有示例都具有完全相同的长度,所以我想知道是否有办法获取整个 TFRecord 文件 (xxx.tfrecord) 的大小(字节数)和大小(字节数) 中的一个示例?然后我想我可以使用

number_of_Examples = (length of TFRecord file) / (length of the first Example) = (bytes of all Examples in xxx.tfrecord) / (bytes of one Expmale)

更快地获取示例数量。

TFRecord 文件本质上是一个 Example 数组,它不包括作为元数据的示例数量。因此,必须对其进行迭代以计算示例的数量。另一种选择是在创建时将大小保存为元数据(在一些单独的文件中)。

编辑:

只要 2 个示例可能具有不同的大小,您提出的方法就不会起作用,即使特征数量相同,有时也会出现这种情况。

如果保证所有示例的字节数完全相同,您可以执行以下操作:

import os
import sys
import tensorflow as tf

def getSize(filename):
    st = os.stat(filename)
    return st.st_size

file = "..."

example_size = 0
example = tf.train.Example()
for x in tf.python_io.tf_record_iterator(file):
    example.ParseFromString(x)
    example_size = example.ByteSize()
    break

file_size = getSize(file)
n = file_size / (example_size + 16)

print("file size in bytes:{}".format(file_size))
print("example size in bytes:{}".format(example_size))
print("N:{}".format(n))