在 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。
我正在处理数百 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)
andmodel.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。