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

时间:2018-08-16 07:17:08

标签: python-3.x tensorflow tfrecord

因为我想在TFRecord文件中获取示例数,所以我当前使用的方法是

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

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

  

number_of_Examples =(TFRecord文件的长度)/(第一个的长度   范例)=(xxx.tfrecord中所有范例的位元组)/(一个Expmale的位元组)

以更快地获取示例数。

1 个答案:

答案 0 :(得分:3)

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

编辑:

只要两个示例的大小不同,您提出的方法就行不通,即使特征数量相同,有时也是如此。

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

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))