【问题标题】:Is it possible to only load part of a TensorFlow dataset?是否可以只加载 TensorFlow 数据集的一部分?
【发布时间】:2020-12-10 09:30:42
【问题描述】:

我在 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.57 GiB,显然需要很长时间才能下载。

【问题讨论】:

    标签: python tensorflow tensorflow-datasets


    【解决方案1】:

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

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

    您可以通过运行自行检查 mnist_ds_5p = tfds.load("mnist", split="train[:5%]") 其次是mnist_ds = tfds.load("mnist", split="train")

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

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

    【讨论】:

      【解决方案2】:

      是的,是的;来自documentation

      split 要加载的数据的哪个拆分(例如'train'、'test'、['train'、'test']、'train[80%:]'、... )。请参阅我们的拆分 API 指南。如果为 None,将返回 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了解更多关于拆分语法的信息

      【讨论】:

      • 谢谢!我将此解释为只能设置分割比例;不是每个拆分的实际大小。
      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      相关资源
      最近更新 更多