Вызов "подходит" несколько раз в Keras
Я работаю над CNN более чем сотнями ГБ изображений. Я создал функцию тренировки, которая откусывает 4Gb куски этих изображений и вызывает fit
по каждой из этих частей. Я волнуюсь, что я только тренируюсь на последнем фрагменте не по всему набору данных.
Фактически, мой псевдокод выглядит следующим образом:
DS = lazy_load_400GB_Dataset()
for section in DS:
X_train = section.images
Y_train = section.classes
model.fit(X_train, Y_train, batch_size=16, nb_epoch=30)
Я знаю, что API и форумы Keras говорят, что это будет тренироваться по всему набору данных, но я не могу интуитивно понять, почему сеть не переучивается только последнему учебному блоку.
Некоторая помощь в понимании этого будет очень оценена.
Бест,
Джо
Ответы
Ответ 1
Для наборов данных, которые не вписываются в память, есть ответ в разделе Раздел вопросов о документации Keras
Вы можете выполнить пакетное обучение с помощью model.train_on_batch(X, y)
и model.test_on_batch(X, y)
. См. Документацию .
В качестве альтернативы вы можете написать генератор, который дает партии учебные данные и используйте метод model.fit_generator(data_generator, samples_per_epoch, nb_epoch)
.
Вы можете увидеть пакетное обучение в действии в нашем примере CIFAR10.
Итак, если вы хотите итерировать свой набор данных так, как вы делаете, вы, вероятно, должны использовать model.train_on_batch
и сами позаботиться о размерах партии и итерации.
Еще одна вещь, которую следует отметить, заключается в том, что вы должны убедиться, что порядок, в котором образцы, с которыми вы тренируете свою модель, перетасовывается после каждой эпохи. То, как вы написали пример кода, похоже, не перетасовывает набор данных. Вы можете прочитать немного больше о перетасовке здесь и здесь
Ответ 2
Этот вопрос был поднят в репозиторий Keras github в Проблема # 4446: Быстрый вопрос: может ли модель быть пригодной несколько раз? Она была закрыта François Chollet со следующим statement:
Да, последовательные вызовы fit
будут постепенно обрабатывать модель.
Итак, да, вы можете вызывать fit несколько раз.