python查看数据集的维度、大小_tf.data.Dataset:如何获取数据集大小(一个元素的元素数量)?...

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)

}

你可能感兴趣的:(python查看数据集的维度,大小)