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