В методе Keras model.fit_generator (), для чего используется управляемый параметром очереди генератор «max_q_size»?

Я построил простой генератор, который дает tuple(inputs, targets) только с одним элементом во inputs и списках targets – в основном обход набора данных, по одному образцу за раз.

Я передаю этот генератор в:

  model.fit_generator(my_generator(), nb_epoch=10, samples_per_epoch=1, max_q_size=1 # defaults to 10 ) 

Я понимаю:

  • nb_epoch – это количество раз, когда будет проходить тренировочная партия
  • samples_per_epoch – количество образцов, прошедших обучение в эпоху

Но что такое max_q_size для и почему он по умолчанию max_q_size 10? Я думал, что цель использования генератора – пакетные наборы данных в разумные куски, так почему же дополнительная очередь?

One Solution collect form web for “В методе Keras model.fit_generator (), для чего используется управляемый параметром очереди генератор «max_q_size»?”

Это просто определяет максимальный размер внутренней очереди обучения, которая используется для «предварительной проверки» ваших образцов из генератора. Он используется во время генерации очередей

 def generator_queue(generator, max_q_size=10, wait_time=0.05, nb_worker=1): '''Builds a threading queue out of a data generator. Used in `fit_generator`, `evaluate_generator`, `predict_generator`. ''' q = queue.Queue() _stop = threading.Event() def data_generator_task(): while not _stop.is_set(): try: if q.qsize() < max_q_size: try: generator_output = next(generator) except ValueError: continue q.put(generator_output) else: time.sleep(wait_time) except Exception: _stop.set() raise generator_threads = [threading.Thread(target=data_generator_task) for _ in range(nb_worker)] for thread in generator_threads: thread.daemon = True thread.start() return q, _stop 

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

  while samples_seen < samples_per_epoch: generator_output = None while not _stop.is_set(): if not data_gen_queue.empty(): generator_output = data_gen_queue.get() break else: time.sleep(wait_time) 

и почему по умолчанию 10? Никакой конкретной причины, как и большинство дефолтов, – это просто имеет смысл, но вы можете использовать и другие значения.

Подобное построение предполагает, что авторы думали о дорогостоящих генераторах данных, что может потребовать времени для прослушивания. Например, рассмотрите возможность загрузки данных по сети в вызове генератора – тогда имеет смысл предусмотреть некоторые последующие партии и загрузить следующие параллельно, ради эффективности и быть надежными для сетевых ошибок и т. Д.

  • Keras | Как запустить пример Inception v3
  • KeyError: «Невозможно открыть атрибут (не удается найти атрибут:« nb_layers »)
  • Форма ввода LSTM в нейронной сети из кадра данных
  • Keras: ImportError: нет модуля с именем data_utils
  • TensorFlow: AttributeError: объект «Тензор» не имеет атрибута «log10»
  • Вес модели CNN переходят к действительно небольшим значениям и после NaN
  • Как создать пользовательскую целевую функцию в Keras?
  • Теано с Keras на малине Pi
  • Python - лучший язык программирования в мире.