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

从Tensorflow中的.tfrecords文件中获取记录总数,tensorflow,tfrecord,Tensorflow,Tfrecord,是否可以从.tfrecords文件中获取记录总数?与此相关的是,在训练模型的过程中,人们通常如何记录已经过去的时代的数量?虽然我们可以指定batch\u size和num\u of_epoch,但我不确定是否可以直接获得诸如当前历元、每个历元的批次数等值,这样我就可以更好地控制培训的进度。目前,我只是用一个肮脏的黑客来计算这个,因为我知道在我的.tfrecords文件中有多少条记录,以及我的小批量的大小。感谢您的帮助。要计算记录数,您应该能够使用 c=0 对于tf_记录中的fn_文件名: 对于t

是否可以从
.tfrecords
文件中获取记录总数?与此相关的是,在训练模型的过程中,人们通常如何记录已经过去的时代的数量?虽然我们可以指定
batch\u size
num\u of_epoch
,但我不确定是否可以直接获得诸如
当前历元
、每个历元的批次数等值,这样我就可以更好地控制培训的进度。目前,我只是用一个肮脏的黑客来计算这个,因为我知道在我的.tfrecords文件中有多少条记录,以及我的小批量的大小。感谢您的帮助。

要计算记录数,您应该能够使用

c=0
对于tf_记录中的fn_文件名:
对于tf.python\u io.tf\u record\u迭代器(fn)中的记录:
c+=1
只需跟踪模型培训就可以了。

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

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

如果需要,您可以手动存储此元数据或使用获取编号(您将需要遍历您拥有的所有记录:

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


如果您想知道当前历元,可以从tensorboard或通过打印循环中的数字来完成此操作。

根据上的弃用警告,我们还可以使用“急切执行”来计数记录

#!/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))
!/usr/bin/env python
来自未来导入打印功能
导入tensorflow作为tf
导入系统
断言len(sys.argv)==2\
“用法:{}”。格式(sys.argv[0])
tf.enable_eager_execution()
输入模式=sys.argv[1]
#如果存在glob,则展开glob
input_files=tf.io.gfile.glob(输入_模式)
#创建数据集
data\u set=tf.data.TFRecordDataset(输入文件)
#清点记录
记录n=总和(数据集中的记录为1)
打印(“记录={}”。格式(记录))
由于不推荐使用,萨尔瓦多·达利大帝现在应该读

tf.enable_eager_execution()
sum(1 for _ in tf.data.TFRecordDataset(file_name))

由于tf.enable_eager_execution()不再有效,请使用:

tf.compat.v1.启用渴望执行


sum(1表示tf.data.TFRecordDataset(文件名))

谢谢!我想知道.tfrecords文件中是否保存了一些元数据,可以用来(查找记录总数),而不是使用
tf\u python\u io.tf\u record\u迭代器()遍历整个数据集
function不幸的是,tfrecords文件中没有元数据。每条记录的开头都有一个大小(uint64长度,uint32 crc),但它在压缩流中,因此您需要解压缩所有内容。因此没有好的方法获取此信息。@BiBi已修复。现在密度降低了