在Keras多次呼叫“适合”

时间:2016-09-01 05:02:38

标签: machine-learning neural-network theano conv-neural-network 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论坛说这将训练整个数据集,但我不能直观地理解为什么网络不会重新学习最后一个训练块。

非常感谢一些帮助理解这一点。

最佳, 乔

2 个答案:

答案 0 :(得分:23)

对于不适合内存的数据集,Keras Documentation FAQ section

中有一个答案
  

您可以使用model.train_on_batch(X, y)和。进行批量培训   model.test_on_batch(X, y)。请参阅models documentation

     

或者,您可以编写一个生成批次的生成器   训练数据并使用方法model.fit_generator(data_generator, samples_per_epoch, nb_epoch)

     

您可以在我们的CIFAR10 example中看到批处理培训。

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

还有一点需要注意的是,您应该确保在每个纪元之后对您训练模型的样本的顺序进行调整。您编写示例代码的方式似乎不会改变数据集。您可以阅读有关改组herehere

的更多信息

答案 1 :(得分:10)

Keras github repository中的Issue #4446: Quick Question: can a model be fit for multiple times?提出了这个问题。François Cholletstatement结束了该问题:

  

是的,对fit的连续调用将逐步训练模型。

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