Керас - Как партии и эпохи используются в 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. Это правильно?

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

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

Ответы на вопрос(2)

Ваш ответ на вопрос