有没有办法将新数据合并到已经训练好的神经网络中,而无需对我在 Keras 中的所有数据进行重新训练?

机器算法验证 神经网络 火车 喀拉斯
2022-01-31 09:08:11

我已经在我的数据上训练了一个神经网络。将来,我会收到更多的数据。如何在不从头开始重建的情况下将这些数据合并到我的模型中?

2个回答

在 keras 中,您可以使用保存模型model.save,然后使用model.load. 如果您.fit再次调用已加载的模型,它将从保存点继续训练,并且不会从头开始重新启动。每次调用时.fit,keras 都会继续对模型进行训练。.fit不重置模型权重。

我想指出以这种方式训练你的模型可能会出现的一个问题,这个问题是灾难性的遗忘. 如果您提供的模型示例与之前的训练示例有显着差异,则可能容易发生灾难性的遗忘。这基本上是当神经网络很好地学习了您的新示例并忘记了所有以前的示例,因为您不再将这些示例提供给它。它的出现是因为随着优化器变得更加高效,神经网络在快速拟合新数据方面将变得更加高效——而快速拟合新数据的最佳方法可能是忘记旧数据。如果您未来的数据与您当前的数据非常相似,那么这将不是问题。但是想象一下,你训练了一个命名实体识别系统来识别组织。如果将来你给它提供一堆数据来教它如何识别人名,它可能会灾难性地忘记如何识别组织。

每次调用时,模型都会继续学习model.fit

您可以使用 保存模型model.save并使用load_model.

这是一个简单的例子:

from keras.layers import SimpleRNN, TimeDistributed

model=Sequential()
model.add(SimpleRNN(input_shape=(None, 2),
                    return_sequences=True, 
                    units=5))
model.add(TimeDistributed(Dense(activation='sigmoid', units=3)))
model.compile(loss = 'mse', optimizer = 'rmsprop')
model.fit(inputs, outputs, epochs = 500, batch_size = 32)

model.save('my_model.h5')

from keras.models import load_model
model = load_model('my_model.h5')

# continue fitting
model.fit(inputs, outputs, epochs = 500, batch_size = 32)