在 Keras 中多次拨打"fit"



我在CNN工作过几百gb的图像。我已经创建了一个训练函数,它从这些图像中抽取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 github储存库问题#4446中提出的:快速问题:一个模型可以适合多次吗?francois Chollet以以下声明结束了会议:

是的,连续调用fit将增量地训练模型。

所以,是的,你可以多次调用fit

对于内存无法容纳的数据集,可以在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和照顾批大小和迭代自己。

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

相关内容

  • 没有找到相关文章

最新更新