Можно ли загрузить только часть набора данных TensorFlow?

#python #tensorflow #tensorflow-datasets

#python #tensorflow #tensorflow-datasets

Вопрос:

У меня есть записная книжка в Google Colab со следующим кодом:

 batch_size = 64
dataset_name = 'coco/2017_panoptic'

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

Я хотел бы знать, возможно ли загружать только часть набора данных (скажем: 5% или X количество изображений) с tfds_load помощью функции. Насколько я вижу в документации, для этого нет аргументов. Конечно, можно было бы нарезать набор данных после загрузки, но этот конкретный dataset ( coco/2017_panoptic ) составляет 19,57 гигабайт, что, очевидно, занимает довольно много времени для загрузки.

Ответ №1:

Первоначальный вопрос был о том, как загрузить подмножество набора данных.

И поэтому ответ, рекомендующий использовать аргумент like split='train[:5%]' как способ загрузки только 5% обучающих данных, ошибочен. Кажется, что это все еще загружает весь набор данных, но затем загружает только 5%.

Вы можете проверить это сами, выполнив mnist_ds_5p = tfds.load("mnist", split="train[:5%]") затем mnist_ds = tfds.load("mnist", split="train")

После выполнения второй команды загрузка не выполняется. Это потому, что весь набор данных уже загружен и кэширован после выполнения первой команды!

Боюсь, что, поскольку многие наборы данных извлекаются из сжатой формы, я сомневаюсь, что есть простой способ избежать загрузки всего набора данных.

Ответ №2:

Да, это так; из документации:

разделить, какое разделение данных загружать (например, ‘train’, ‘test’, [‘train’, ‘test’], ‘train[80%:]’,…). Смотрите наше руководство по разделенному API. Если нет, вернет все разбиения в Dict[Split, tf.data.Набор данных]

Итак, если мне нужны первые 5% обучающего набора данных MNIST, я мог бы сделать это таким образом :

 >>> 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 содержит 60000 обучающих изображений, а у нас 3000, так что 5%.

Вы можете узнать больше о синтаксисе разделения, прочитав руководство по разделению и нарезке

Комментарии:

1. Спасибо! Я интерпретировал это как возможность устанавливать только пропорции разделения; не фактический размер каждого разделения.