Проблема производительности tf.Dataset.from_tensor_slices - PullRequest
0 голосов
/ 15 сентября 2018

Для моего ввода fn я заполняю tf.Data.Dataset.from_tensor_slices ((np.array1, np.array2, np.array3)

И я анализирую их, вызывая dataset.map. в результате я возвращаю свой набор данных.

Я бы понял, что инициализация набора данных может быть медленной, но когда я вызываю функцию tf.estimator train_and_evaluate для обучения и оценки модели, она работает очень плохо. Вероятно, это заполнение данных в каждой эпохе. В чем будет причина? Как я могу преодолеть эту проблему. Каковы будут ваши рекомендации?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Чтобы повысить эффективность приема данных, вы можете попробовать три разные вещи:

  1. Используйте Tfrecords.
  2. Использование функции генератора
  3. Использование специального устройства чтения наборов данных

Использование tf-записей, вероятно, самый простой и эффективный способ решения этой проблемы.Это обеспечивает большую скорость, как только вы преобразуете свой набор данных в набор данных записи tf

Если вы не хотите конвертировать ваш набор данных, вы застряли еще с двумя методами:

Использование генератора и создание генераторанабор данных с использованием функции tf dataset.from_generator (https://www.tensorflow.org/api_docs/python/tf/data/Dataset).Это замедлит ваш прием данных, так как вы не используете оптимизированный читатель C ++, но с небольшим количеством волшебства вы можете создавать вполне нормальных читателей.Используйте этот метод, если вы хотите быстро взглянуть на ваш набор данных.

Если вам нужны скорости, схожие с показателями tfrecords, вам нужно создать специальную программу чтения для набора данных tf.Вы можете найти объяснение здесь: https://www.tensorflow.org/extend/new_data_formats Для того, чтобы это работало, вам нужно немного знаний C ++.

Всего:

Tf record, если вы хотите конвертировать

from_generator, если вы хотите работать быстро и грязно, а производительность - не самая важная

собственная функция чтения, если вы хотите сделать это правильно

Я надеюсь, что смог помочьнемного:)

0 голосов
/ 18 сентября 2018

Проблема в том, что вы выполняете обход Python c ++.Если вы можете попытаться избежать использования NumPy столько, сколько вы можете.Может быть, попробуйте использовать записи TF.

Что именно вы делаете в функции карты?

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