Я тренирую модель, используя керас.Я попробовал обе функции: «fit» и «fit_generator».и я не понимаю, почему есть большая разница в производительности, может быть, я делаю что-то не так.Это первый раз, когда я написал код batch_generator.
с учетом размера партии 10, что я наблюдал при использовании функции -
fit :он тренируется быстрее (около 3 минут за эпоху), число в многословном увеличении увеличивается с кратными размерами партии (здесь 10)
sample- 80/7632 [..............................] - ETA: 4:31 - потери: 2,2072 - в соотв. 0,4375
fit_generator : тренируется намного медленнее (10 минут за эпоху), число при многословном увеличении на 1 за раз (не равно размеру партии)
Образец - 37/7632 [..............................] - ETA: 42:25 - потери: 2,1845 - в соответствии: 0,3676
Как вы можете видеть ETAслишком велик для fit_generator для того же набора данных.И fit_generator увеличивается каждый раз на 1, тогда как fit увеличивается в несколько раз: 10
Генератор:
def batch_generator(X ,y, batch_size=10):
from sklearn.utils import shuffle
batch_count = int(len(X) / batch_size)
extra = len(X) - (batch_count * batch_size)
while 1:
#shuffle X and y
X_train, y_train = shuffle(X,y)
#Yeild Batches
for i in range(1, batch_count):
batch_start = (i-1) * batch_size
batch_end = i * batch_size
X_batch = X_train[batch_start: batch_end]
y_batch = y_train[batch_start: batch_end]
yield X_batch, y_batch
#Yeild Remaining Data less than batch size
if(extra > 0):
batch_start = batch_count * batch_size
X_batch = X_train[batch_start: -1]
y_batch = y_train[batch_start: -1]
yield X_batch, y_batch
Функция Fit:
model.fit_generator(batch_generator(X, y, 10),
verbose = 1,
samples_per_epoch = len(X),
epochs = 20,
validation_data = (X_test, y_test),
callbacks = callbacks_list)
Может кто-нибудь объяснить, почемуэто происходит?