从Tensorflow中的.tfrecords文件获取记录总数
tensorflow
6
0

是否可以从.tfrecords文件获取记录总数?与此相关的是,人们通常如何跟踪训练模型时经过的纪元数?尽管我们可以指定batch_sizenum_of_epochs ,但我不确定是否可以直接获取诸如current epoch ,每个时期的批次数量等值-只是为了让我可以更好地控制培训的进行方式。目前,我只是用一个肮脏的hack来计算它,正如我事先知道的.tfrecords文件中有多少条记录以及迷你批处理的大小一样。感谢任何帮助。

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

要计算记录数,您应该可以使用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

为了跟踪模型训练, 量板非常有用。

收藏
评论

根据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已被弃用,萨尔瓦多·达利(Salvador Dali)的出色答案现在应该阅读

tf.enable_eager_execution()
sum(1 for _ in tf.data.TFRecordDataset(file_name))
收藏
评论

不,这是不可能的。 TFRecord不存储有关存储在其中的数据的任何元数据。这个文件

表示(二进制)字符串序列。该格式不是随机访问,因此它适合于流式传输大量数据,但如果需要快速分片或其他非顺序访问,则不适合。

如果需要,可以手动存储此元数据,也可以使用record_iterator来获取数字(您将需要遍历所有记录:

sum(1 for _ in tf.python_io.tf_record_iterator(file_name))

如果您想知道当前纪元,可以通过张量板或通过打印循环中的数字来实现。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号