6 个答案:
答案 0 :(得分:4)
tf.data.Dataset.list_files创建一个名为MatchingFiles:0的张量(如果适用,使用适当的前缀)。
你可以评估
tf.shape(tf.get_default_graph().get_tensor_by_name('MatchingFiles:0'))[0]
获取文件数。
当然,这仅适用于简单的情况,特别是如果每张图像只有一个样本(或已知数量的样本)。
在更复杂的情况下,例如当您不知道每个文件中的样本数量时,您只能观察到一个时期结束时的样本数量。
为此,您可以观看Dataset计算的时期数。 repeat()创建一个名为_count的成员,用于计算时期数。通过在迭代期间观察它,您可以发现它何时发生变化并从那里计算数据集大小。
这个计数器可能埋没在连续调用成员函数时创建的Dataset层次结构中,所以我们必须像这样挖掘它。
d = my_dataset
# RepeatDataset seems not to be exposed -- this is a possible workaround
RepeatDataset = type(tf.data.Dataset().repeat())
try:
while not isinstance(d, RepeatDataset):
d = d._input_dataset
except AttributeError:
warnings.warn('no epoch counter found')
epoch_counter = None
else:
epoch_counter = d._count
请注意,使用此技术时,数据集大小的计算并不精确,因为epoch_counter递增的批处理通常会混合来自两个连续历元的样本。所以这个计算精确到你的批次长度。
答案 1 :(得分:3)
不幸的是,我不相信TF中有这样的功能。使用TF 2.0并渴望执行,您可以遍历数据集:
num_elements = 0
for element in dataset:
num_elements += 1
这是我想出的最有效的存储方式
确实感觉这是应该在很久以前添加的功能。手指交叉,他们在以后的版本中增加了长度功能。
答案 2 :(得分:3)
该功能不适用于TFRecord数据集,但适用于其他类型。
TL; DR:
num_elements = tf.data.experimental.cardinality(dataset).numpy()
答案 3 :(得分:1)
len(list(dataset))在渴望模式下工作,尽管显然这不是一个好的通用解决方案。
答案 4 :(得分:0)
对于张量流数据集,您可以使用_, info = tfds.load(with_info=True)。然后,您可以致电info.splits['train'].num_examples。但是即使在这种情况下,如果您定义自己的拆分也无法正常工作。
因此您可以对文件进行计数或遍历数据集(如其他答案中所述):
num_training_examples = 0
num_validation_examples = 0
for example in training_set:
num_training_examples += 1
for example in validation_set:
num_validation_examples += 1
答案 5 :(得分:0)
以下代码可在TF2中使用:
var indexPath:[IndexPath] = []
for section in 0..
for row in 0..
guard let cell = self.tableView.cellForRow(
at: IndexPath(row: row, section: section)) as? MyCellType else {
return
}
if myCheck { // do your check here
indexPath.append(IndexPath(row: row, section: section))
}
}
}
if let first = indexPath.first {
self.tableView.scrollToRow(at: first, at: .middle, animated: true)
}