如何在不丢失新数据的情况下丢失模型的情况下重新训练模型

时间:2019-09-22 12:12:44

标签: python-3.x tensorflow keras deep-learning face-recognition

对于我当前的需求,我有一个来自100个不同人的1万多张脸的数据集,我从中训练了一种识别脸的模型。通过从facenet_keras.h5模型中获取128个向量并将这些向量值馈送到Dense层以对面孔进行分类,可以对模型进行训练。 但是我目前面临的问题是

  1. 如果要训练一个人的脸,我必须再次重新训练整个模型。

我应该如何应对这一挑战?我已经读过一个叫做转移学习的概念,但是我不知道如何实现它。请就这个问题提出您的建议。有什么可能的解决方案?

2 个答案:

答案 0 :(得分:0)

您可以通过以下方式保存体重来保存训练结果:

model.load_weights('my_model_weights.h5')

使用以下方法将新图像添加到数据集中后,稍后再次加载它们以继续训练:

packs/application.js

答案 1 :(得分:0)

通过转移学习,您将复制一个现有的预训练模型并将其用于与原始模型不同但相似的数据集。如果您要训练模型来识别特定的100个人,这就是您需要做的。

如果您已经这样做,并且想要在不重新训练整个模型的情况下将另一个人添加到数据库中,那么我将冻结所有层(为所有层设置layer.trainable = False),除了最终完全连接的层层(或最后几层)。然后,我将最后一层(具有100个节点)替换为具有101个节点的层。您甚至可以将权重复制到前100个节点,也可以冻结它们(我不确定在Keras中是否可行)。在这种情况下,您将重用所有训练有素的卷积层等,并教模型识别新面孔。