Tensorflow Dataset API - объяснение поведения - PullRequest
0 голосов
/ 13 февраля 2019

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

dataset = tf.data.TFRecordDataset(filepath)
dataset = dataset.map(parse_function, num_parallel_calls=4)
dataset = dataset.repeat()
dataset = dataset.shuffle(1024)
dataset = dataset.batch(16)
iterator = dataset.make_one_shot_iterator()

1. dataset.map(parse_function, num_parallel_calls=4) - Сколько записей мы загружаем здесь?Сколько поместится в памяти или какое-то фиксированное число?

2. dataset = dataset.repeat() - Что именно мы повторим?В данный момент загружен фрагмент данных из пункта .1?Если это так, значит ли это, что мы больше не будем загружать другие?

3. Как именно работает перемешивание?

4.Можно ли использовать повторение, перемешивание и пакет перед отображением и обработкойпути к файлам вместо одних файлов?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019
  1. Данные в API набора данных загружаются лениво, поэтому это зависит от последующих операций.Теперь вы загружаете 1024 семпла за раз из-за размера буфера перемешивания.Это должно заполнить буфер перемешивания.Затем данные будут загружаться лениво, когда вы будете получать значения из итератора.
  2. Вы повторяете загруженные данные, потому что повторение происходит после функции карты.Вот почему рекомендуется выполнять перемешивание перед синтаксическим анализом данных, поскольку он более дружественен к памяти.
  3. Перестановка загружает некоторые данные (в зависимости от размера буфера перемешивания) и перетасовывает эти данные.
  4. Да, вы можете повторить, перемешать и затем отобразить карту, это даже рекомендуется в руководстве по производительности .И есть также функция, которая объединяет repeat и shuffle вместе здесь .
0 голосов
/ 13 февраля 2019
  1. Здесь вы загружаете весь набор данных.Обычно не рекомендуется наносить карту до начала партии.Tensorflow имеет жесткий предел 2GB на размер тензорного.num_parallel_calls означает количество функций карты, примененных параллельно.
  2. dataset.repeat() без указанного значения периода будет повторять набор данных бесконечно.
  3. Shuffle будет случайным образом перемешивать набор данных с указанным значением буфера.Для правильного перемешивания обычно рекомендуется установить это значение равным длине набора данных и применить эту функцию до начала пакета.
  4. tf.data.TFRecordDataset ожидает имена файлов в качестве входных данных.Как правило, предпочтительный заказ

    dataset = dataset.shuffle(shuffle_buffer).repeat()
    dataset = dataset.batch(batch_size)
    dataset = dataset.map(map_func)
    

Взгляните на https://www.tensorflow.org/guide/performance/datasets

...