Keras: ¿cómo se usan los lotes y las épocas en fit_generator ()?

Tengo un video de 8000 cuadros, y me gustaría entrenar un modelo Keras en lotes de 200 cuadros cada uno. Tengo un generador de cuadros que recorre el video cuadro por cuadro y acumula los cuadros (3 x 480 x 640) en una matriz numpyX de forma(200, 3, 480, 640) - (tamaño del lote, rgb, altura del marco, ancho del marco) - y rendimientosX yY cada 200a fotograma:

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

Así es como se ejecutafit_generator():

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

Mi entendimiento es que una época termina cuandosamples_per_epoch el modelo ha visto muestras, ysamples_per_epoch = tamaño de lote * número de lotes = 200 * 40. Entonces, después del entrenamiento para una época en los cuadros 0-7999, la próxima época comenzará a entrenar nuevamente desde el cuadro 0. ¿Es esto correcto?

Con esta configuraciónEspero que se pasen 40 lotes (de 200 cuadros cada uno) del generador afit_generator, por época; esto sería 8000 cuadros totales por época - es decir,samples_per_epoch=8000. Luego, para épocas posteriores,fit_generator reiniciaría el generador de modo que comenzaremos a entrenar nuevamente desde el comienzo del video. Sin embargo, este no es el caso.Una vez que se completa la primera época (después de que el modelo registra los lotes 0-24), el generador continúa donde lo dejó. ¿No debería comenzar la nueva época desde el principio del conjunto de datos de entrenamiento?

Si hay algo incorrecto en mi comprensión defit_generator por favor explique. He revisado la documentación, estoejemplo, y estosrelacionado cuestiones. Estoy usando Keras v1.0.7 con el backend TensorFlow. Este problema también se publica en elKeras repo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta