Разъяснение о keras.utils.Sequence - PullRequest
       10

Разъяснение о keras.utils.Sequence

0 голосов
/ 04 декабря 2018

Keras имеет очень мало информации о keras.utils.Sequence , фактически единственная причина, по которой я хочу извлечь мой пакетный генератор из keras.utils.Sequence, заключается в том, что я хочу не писать пул потоков с очередью самостоятельно, но я не уверен, что это лучший выбор для моей задачи, вот мои вопросы:

  1. Что должно возвращаться __len__, если у меня есть генератор случайных чисел и у меня нет предварительно определенного списка'с образцами.
  2. Как keras.utils.Sequence следует использовать с fit_generator, меня интересуют max_queue_size, workers, use_multiprocessing, shuffle параметры в основном.
  3. Какие другиеварианты доступны в керасе?

1 Ответ

0 голосов
/ 05 декабря 2018
  1. Все, что вы хотите, учитывая, что одна эпоха получит len партий из Последовательности.
  2. Секрета нет, используйте его как любой другой генератор, с той разницей, что вы можете сделать steps_per_epoch=len(generator) или steps_per_epoch=None.
    • max_queue_size: при любом значении будут загружаться партии, которые будут находиться в памяти до тех пор, пока их очередь не попадет в модель
    • workers: при любом значении это будет числопараллельные «потоки» (простите, если имя не точное), которые будут загружать пакеты
    • use_multiprocessing: я этого не знаю.Это было не нужно для меня, и единственный раз, когда я попробовал, он был достаточно глючным, чтобы заморозить мою машину
    • shuffle: с документация : Boolean.Перемешивать ли порядок партий в начале каждой эпохи.Используется только с экземплярами Sequence (keras.utils.Sequence).Не имеет никакого эффекта, когда steps_per_epoch не None.
  3. Я думаю, что это так.Если вы хотите связать саму модель, то, возможно, вы захотите прочитать про обучение на нескольких GPU.

Преимущества Sequence по сравнению с обычным генератором:

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

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

Преимущества генераторов и последовательностей над циклом

В цикле вы будете «ждать пакетной загрузки», «ждать обучения модели», «ждать пакетной загрузки», «ждатьМодельное обучение ».

При fit_generator партии будут загружаться «в то время», пока модель тренируется, и обе вещи происходят одновременно.

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

...