是否可以只加载TensorFlow数据集的一部分?

2024-09-30 08:36:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Google Colab中有一个笔记本,上面有以下代码:

batch_size = 64
dataset_name = 'coco/2017_panoptic'

tfds_dataset, tfds_info = tfds.load(
    dataset_name, 
    split='train', 
    with_info=True)

我想知道是否可以使用tfds_load函数只下载数据集的一部分(例如:5%或X个图像)。据我在文档中看到的,没有这样做的参数。当然,在加载后可以对数据集进行切片,但是这个特定的数据集(coco/2017_panoptic)是19.57gib,下载显然需要相当长的时间


Tags: 数据代码nameinfosizebatchgoogleload
2条回答

是的,是的;从documentation开始:

split Which split of the data to load (e.g. 'train', 'test', ['train', 'test'], 'train[80%:]',...). See our split API guide. If None, will return all splits in a Dict[Split, tf.data.Dataset]

因此,如果我想要MNIST数据集训练集的前5%,我可以这样做:

>>> mnist_ds_5p = tfds.load("mnist", split="train[:5%]")
>>> # looking at the size of the dataset
>>> mnist_ds_5p.cardinality()
<tf.Tensor: shape=(), dtype=int64, numpy=3000>

这个MNIST dataset contains 60000 training images,我们有3000个,所以5%

您可以通过阅读Splits and slicing guide来了解有关拆分语法的更多信息

最初的问题是关于如何下载数据集的子集

因此,建议使用像split='train[:5%]'这样的参数作为只下载5%训练数据的方式的答案是错误的。看起来它仍然下载整个数据集,但只加载5%

您可以通过运行 mnist_ds_5p = tfds.load("mnist", split="train[:5%]") 然后是mnist_ds = tfds.load("mnist", split="train")

运行第二个命令后不会进行下载。这是因为在运行第一个命令之后,整个数据集已经被下载和缓存

由于许多数据集都是从压缩表单中获取的,我怀疑有没有一种简单的方法可以避免下载整个数据集

相关问题 更多 >

    热门问题