Вызов "fit" несколько раз в Керасе

Я работаю над CNN более нескольких сотен GBs изображений. Я создал функцию обучения, которая откусывает куски 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 говорят, что это будет тренироваться по всему набору данных, но я не могу интуитивно понять, почему сеть не будет переучиваться только за последний тренировочный кусок.

помощь это понимание будет высоко ценится.

лучшие, Джо!--3-->

2 ответов


для наборов данных, которые не помещаются в память, есть ответ в Keras документация FAQ раздел

вы можете сделать пакетное обучение с помощью 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 и позаботьтесь о размерах партии и итерации самостоятельно.

еще одна вещь, чтобы отметить, что вы должны убедиться, что порядок, в котором образцы вы тренируете свою модель тасуется после каждой эпохи. То, как вы написали пример кода, похоже, не перетасовывает набор данных. Вы можете прочитать немного больше о тасу здесь и здесь


этот вопрос был поднят на хранилище Keras github на вопрос #4446: быстрый вопрос: Может ли модель быть пригодной для нескольких раз? Он был закрыт Франсуа Чоллет следующим сообщении:

да, последовательные звонки в fit будет постепенно обучать модель.

Итак, да, вы можете вызвать fit несколько раз.