Keras – Как используются партии и эпохи в fit_generator ()?

У меня есть видео из 8000 кадров, и я хотел бы обучить модель Keras по партиям по 200 кадров каждый. У меня есть генератор кадров, который катит по кадру за кадром и накапливает (3 x 480 x 640) кадров в матрицу X размером (200, 3, 480, 640) – (размер партии, rgb, высота рамки, ширина рамки) – и дает X и Y каждый 200-й кадр:

 import cv2 ... def _frameGenerator(videoPath, dataPath, batchSize): """ Yield X and Y data when the batch is filled. """ camera = cv2.VideoCapture(videoPath) width = camera.get(3) height = camera.get(4) frameCount = int(camera.get(7)) # Number of frames in the video file. truthData = _prepData(dataPath, frameCount) X = np.zeros((batchSize, 3, height, width)) Y = np.zeros((batchSize, 1)) batch = 0 for frameIdx, truth in enumerate(truthData): ret, frame = camera.read() if ret is False: continue batchIndex = frameIdx%batchSize X[batchIndex] = frame Y[batchIndex] = truth if batchIndex == 0 and frameIdx != 0: batch += 1 print "now yielding batch", batch yield X, Y 

Вот как работает fit_generator() :

  batchSize = 200 print "Starting training..." model.fit_generator( _frameGenerator(videoPath, dataPath, batchSize), samples_per_epoch=8000, nb_epoch=10, verbose=args.verbosity ) 

Мое понимание – это окончание эпохи, когда образцы samples_per_epoch были замечены моделью, а samples_per_epoch = размер партии * количество партий = 200 * 40. Поэтому после обучения в эпоху на кадрах 0-7999 следующая эпоха начнет тренироваться снова с кадр 0. Правильно ли это?

С этой установкой я ожидаю, что из fit_generator генератора будет fit_generator 40 партий (по 200 кадров каждый), для каждой из них – по fit_generator ; это будет 8000 общих кадров за эпоху, т. е. samples_per_epoch=8000 . Затем для последующих эпох fit_generator будет fit_generator инициализировать генератор таким образом, чтобы мы начали тренироваться снова с начала видео. Но это не так. После того, как первая эпоха завершена (после серийных журнальных партий 0-24), генератор поднимается там, где он остановился. Разве новая эпоха не начинается с начала учебного набора данных?

Если в моем понимании fit_generator есть что-то неправильное, пожалуйста, объясните. Я просмотрел документацию, этот пример и связанные с этим проблемы . Я использую Keras v1.0.7 с поддержкой TensorFlow. Эта проблема также размещена в репозитории Keras .

2 Solutions collect form web for “Keras – Как используются партии и эпохи в fit_generator ()?”

После того, как первая эпоха завершена (после того, как модель регистрирует партии 0-24), генератор поднимается там, где он остановился

Это точное описание того, что происходит. Если вы хотите сбросить или перемотать генератор, вам придется сделать это самостоятельно. Обратите внимание, что поведение keras весьма полезно во многих ситуациях. Например, вы можете закончить эпоху после просмотра 1/2 данных, а затем сделать эпоху на другой половине, что было бы невозможно, если бы статус генератора был сброшен (что может быть полезно для более тщательного контроля проверки).

Вы можете заставить генератор сбрасывать себя, добавив while 1: цикл, вот как я продолжаю. Таким образом, ваш генератор может получать пакетные данные для каждой эпохи.

  • Keras ValueError: операция ввода-вывода в закрытом файле
  • Keras + Tensorflow: предсказание о множественном gpus
  • Определение плотности с использованием keras library
  • Keras Ошибка при проверке: ожидается, что embedding_1_input будет иметь форму (None, 100), но получит массив с формой (1, 3)
  • Понимание формы ввода lstm в керах с различной последовательностью
  • Keras Conv2D и входные каналы
  • Простейшая тренировка Lstm с Keras io
  • Как управлять памятью при использовании Keras с бэкэндом tensorflow?
  • Python - лучший язык программирования в мире.