나는 8000 프레임의 비디오를 가지고 있으며, 각각 200 프레임의 배치로 Keras 모델을 훈련하고 싶습니다. 프레임마다 비디오를 순환하고 (3x480x640) 프레임을 누적 행렬 X
(누적 크기, rgb, 프레임 높이, 프레임 너비) 모양 으로 축적하는 프레임 생성기가 있습니다. 수율은 X
및 Y
모든 200 프레임 : * samples_per_epoch
샘플 모델 볼되었을 때Keras - 배치 및 신기원은 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
= 배치 크기 : 여기
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()
을 실행 어떻게 배치 수 = 200 * 40. 따라서 0-7999 프레임의 에포크를 훈련 한 후에 다음 에포크는 0 프레임에서 다시 훈련을 시작합니다. 맞습니까?
발전기에서 40 획 (각 200 프레임)이 신기원 당 fit_generator
이 될 것으로 예상합니다. 이것은 신기원 당 총 8000 개의 총 프레임 수 - 즉, samples_per_epoch=8000
입니다. 이어지는 신기원을 위해 fit_generator
은 발전기를 다시 초기화하여 비디오의 처음부터 다시 훈련을 시작합니다. 그러나 이것은 사실이 아닙니다. 첫 번째 신기원이 완료되면 (모델 로그 배치 0-24가 기록 된 후), 생성기는 중단 된 부분을 선택합니다. 새로운 신기원을 훈련 데이터 세트의 처음부터 다시 시작하면 안됩니까?
제발 이해가 안되는 부분이 있으시면 fit_generator
설명해주십시오. 나는 설명서를 읽었으며,이 example과이 relatedissues입니다. 나는 Kerano v1.0.7을 TensorFlow 백엔드와 함께 사용하고 있습니다. 이 문제는 Keras repo에도 게시됩니다. 첫 번째 시대가 완료되면 (모델이 배치 0-24를 기록 후)
일시적인 수정으로 저는 수동으로 에포크를 반복하고 다음과 같이'model.fit()'를 호출합니다 : https://github.com/fchollet/keras/issues/107 – BoltzmannBrain