Tensorflow: объединение нескольких TF. Набор данных очень медленно - PullRequest
0 голосов
/ 31 августа 2018

Я нахожусь на Tensorflow 1.10

Сейчас я не уверен, что это ошибка.

Я пытался объединить около 100 наборов данных, сгенерированных из нескольких tf.data.Dataset.from_generator.

for i in range(1, 100):
        dataset = dataset.concatenate(
            tf.data.Dataset.from_generator(gens[i], (tf.int8, tf.int32), output_shapes=(
                (256, 256), (1))))
        print(i)
 print("before iterator")
 iterator = dataset.make_one_shot_iterator()
 print("after iterator")

запуск make_one_shot_iterator() занимает очень много времени.

Кто-нибудь знает исправление?

EDIT:

Похоже, что _make_dataset.add_to_graph(ops.get_default_graph()) кажется, вызывается снова и снова, что приводит к нескольким миллионам вызовов функции. (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/data/ops/dataset_ops.py функция make_one_shot_iterator строка 162)

1 Ответ

0 голосов
/ 14 апреля 2019

Запуск concatenate на самом деле не лучшая вещь для нескольких тензоров или генераторов, подобных этому.

Лучше использовать flat_map https://www.tensorflow.org/api_docs/python/tf/data/Dataset#flat_map. Я обновил Пример некоторое время, чтобы показать, как вы можете использовать это для нескольких тензоров или файлов.

...