Вызов "подходит" несколько раз в 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 несколько раз.