8000 karelik bir videom var ve her biri 200 karelik seriye bir Keras modeli eğitmek istiyorum. Video karesiyle çerçeve içine geçen ve (3 x 480 x 640) kareleri (200, 3, 480, 640)
X
- (küme boyutu, rgb, çerçeve yüksekliği, çerçeve genişliği) rakamsal matrisine biriktiren bir çerçeve jeneratörü var - ve verimleri X
ve Y
her 200 kare: * samples_per_epoch
numuneler modeli tarafından görülmüş zamanKeras - fit_generator() 'da gruplar ve çağlar nasıl kullanılır?
batchSize = 200
print "Starting training..."
model.fit_generator(
_frameGenerator(videoPath, dataPath, batchSize),
samples_per_epoch=8000,
nb_epoch=10,
verbose=args.verbosity
)
Benim anlayış bir dönem bitirir ve samples_per_epoch
= parti boyutu: Burada
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()
çalıştırmak nasıl parti sayısı = 200 * 40. Bu nedenle, 0-7999 numaralı karelere bir dönem için eğitim verdikten sonra, bir sonraki dönem çerçeve 0'dan tekrar eğitime başlayacaktır. Bu doğru mu? Bu kurulum ile
fit_generator
jeneratörden geçirilecek (200 kare her); Bu, her bir dönem için 812 toplam çerçeve olacaktır ( - yani,
samples_per_epoch=8000
). Ardından, sonraki dönemler için,
fit_generator
, jeneratörü yeniden başlatır, böylece videonun başlangıcından itibaren tekrar eğitime başlarız. Ancak durum böyle değil.
İlk dönem tamamlandıktan sonra (model kütükleri 0-24'ten sonra), jeneratör kaldığı yerden devam eder. Yeni dönem, eğitim veri kümesinin başlangıcından yeniden başlatılmamalıdır?
fit_generator
anlayışımda yanlış bir şey varsa lütfen açıklayın. Dokümantasyondan geçtim, bu example ve bu relatedissues. TensorFlow arka ucunda Keras v1.0.7 kullanıyorum. Bu sorun, ayrıca Keras repo'da da yayınlanmıştır. İlk çağ tamamlandıktan sonra (model toplu 0-24 kaydeder sonra)
Geçici bir düzeltme olarak, el ile çogunlukla çogunlukla yineliyorum ve 'model.fit()' yi çagriyoruz, burada gösterildiği gibi: https://github.com/fchollet/keras/issues/107 – BoltzmannBrain