有没有办法获取 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))
因为我想获取一个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))