从 Tensorflow 中的 .tfrecords 文件获取记录总数
Obtaining total number of records from .tfrecords file in Tensorflow
是否可以从 .tfrecords
文件中获取记录总数?与此相关,人们通常如何跟踪训练模型时已经过去的时期数?虽然我们可以指定 batch_size
和 num_of_epochs
,但我不确定是否可以直接获取 current epoch
、每个时期的批次数等值 - 只是这样我可以更好地控制培训的进展情况。目前,我只是使用一个肮脏的 hack 来计算它,因为我事先知道我的 .tfrecords 文件中有多少记录以及我的小批量的大小。感谢任何帮助..
要计算记录的数量,你应该可以使用tf.python_io.tf_record_iterator
。
c = 0
for fn in tf_records_filenames:
for record in tf.python_io.tf_record_iterator(fn):
c += 1
为了跟踪模型训练,tensorboard 派上用场。
不,这是不可能的。 TFRecord 不存储有关存储在其中的数据的任何元数据。这个文件
represents a sequence of (binary) strings. The format is not random
access, so it is suitable for streaming large amounts of data but not
suitable if fast sharding or other non-sequential access is desired.
如果需要,您可以手动存储此元数据或使用 record_iterator 获取数字(您将需要遍历您拥有的所有记录:
sum(1 for _ in tf.python_io.tf_record_iterator(file_name))
如果你想知道当前的纪元,你可以从张量板上或通过打印循环中的数字来做到这一点。
根据 tf_record_iterator 上的弃用警告,我们还可以使用预先执行来计算记录。
#!/usr/bin/env python
from __future__ import print_function
import tensorflow as tf
import sys
assert len(sys.argv) == 2, \
"USAGE: {} <file_glob>".format(sys.argv[0])
tf.enable_eager_execution()
input_pattern = sys.argv[1]
# Expand glob if there is one
input_files = tf.io.gfile.glob(input_pattern)
# Create the dataset
data_set = tf.data.TFRecordDataset(input_files)
# Count the records
records_n = sum(1 for record in data_set)
print("records_n = {}".format(records_n))
萨尔瓦多·达利 tf.io.tf_record_iterator is being deprecated, the great 现在应该读作
tf.enable_eager_execution()
sum(1 for _ in tf.data.TFRecordDataset(file_name))
由于tf.enable_eager_execution()不再有效,使用:
tf.compat.v1.enable_eager_execution
sum(1 for _ in tf.data.TFRecordDataset(FILENAMES))
是否可以从 .tfrecords
文件中获取记录总数?与此相关,人们通常如何跟踪训练模型时已经过去的时期数?虽然我们可以指定 batch_size
和 num_of_epochs
,但我不确定是否可以直接获取 current epoch
、每个时期的批次数等值 - 只是这样我可以更好地控制培训的进展情况。目前,我只是使用一个肮脏的 hack 来计算它,因为我事先知道我的 .tfrecords 文件中有多少记录以及我的小批量的大小。感谢任何帮助..
要计算记录的数量,你应该可以使用tf.python_io.tf_record_iterator
。
c = 0
for fn in tf_records_filenames:
for record in tf.python_io.tf_record_iterator(fn):
c += 1
为了跟踪模型训练,tensorboard 派上用场。
不,这是不可能的。 TFRecord 不存储有关存储在其中的数据的任何元数据。这个文件
represents a sequence of (binary) strings. The format is not random access, so it is suitable for streaming large amounts of data but not suitable if fast sharding or other non-sequential access is desired.
如果需要,您可以手动存储此元数据或使用 record_iterator 获取数字(您将需要遍历您拥有的所有记录:
sum(1 for _ in tf.python_io.tf_record_iterator(file_name))
如果你想知道当前的纪元,你可以从张量板上或通过打印循环中的数字来做到这一点。
根据 tf_record_iterator 上的弃用警告,我们还可以使用预先执行来计算记录。
#!/usr/bin/env python
from __future__ import print_function
import tensorflow as tf
import sys
assert len(sys.argv) == 2, \
"USAGE: {} <file_glob>".format(sys.argv[0])
tf.enable_eager_execution()
input_pattern = sys.argv[1]
# Expand glob if there is one
input_files = tf.io.gfile.glob(input_pattern)
# Create the dataset
data_set = tf.data.TFRecordDataset(input_files)
# Count the records
records_n = sum(1 for record in data_set)
print("records_n = {}".format(records_n))
萨尔瓦多·达利 tf.io.tf_record_iterator is being deprecated, the great
tf.enable_eager_execution()
sum(1 for _ in tf.data.TFRecordDataset(file_name))
由于tf.enable_eager_execution()不再有效,使用:
tf.compat.v1.enable_eager_execution
sum(1 for _ in tf.data.TFRecordDataset(FILENAMES))