在 Keras 中多次调用 "fit"

Calling "fit" multiple times in Keras

我正在处理数百 GB 图像的 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 论坛说这将训练整个数据集,但我无法直观地理解为什么网络不会仅在最后一个训练块上重新学习。

如果能帮助理解这一点,我们将不胜感激。

最好的, 乔

对于无法放入内存的数据集,Keras Documentation FAQ section

中有答案

You can do batch training using model.train_on_batch(X, y) and model.test_on_batch(X, y). See the models documentation.

Alternatively, you can write a generator that yields batches of training data and use the method model.fit_generator(data_generator, samples_per_epoch, nb_epoch).

You can see batch training in action in our CIFAR10 example.

因此,如果您想按照自己的方式迭代数据集,您可能应该使用 model.train_on_batch 并自行处理批量大小和迭代。

还有一件事需要注意,您应该确保在每个 epoch 之后打乱用于训练模型的样本的顺序。您编写示例代码的方式似乎并没有打乱数据集。您可以阅读更多关于洗牌的内容 here and here

这个问题是在 Keras github repository in Issue #4446: Quick Question: can a model be fit for multiple times? It was closed by François Chollet with the following statement 提出的:

Yes, successive calls to fit will incrementally train the model.

所以,是的,您可以多次调用 fit。