如何用现有的类和更新的类来微调keras模型?

2024-05-18 23:30:41 发布

您现在位置:Python中文网/ 问答频道 /正文

你好!你知道吗

我有一个名人数据集,我想微调一个keras内置模型。到目前为止,我所探索和做的是,我们移除原始模型的顶层(或者最好传递include\u top=False)并添加我们自己的层,然后训练新添加的层,同时保持之前的层冻结。这整件事很像直觉。你知道吗

现在我需要的是,我的模型要学会识别名人的脸,同时也能检测出它以前训练过的所有其他物体。最初,在imagenet上训练的模型有一个1000个神经元的输出层,每个神经元代表一个单独的类。我对它应该如何检测新类感到困惑?所有的迁移学习和微调的文章和博客都告诉我们用一个不同的N神经元层(N=新类的数量)来替换原来的1000个神经元输出层。在我的例子中,我有两个名人,所以如果我有一个新的层有两个神经元,我不知道这个模型将如何对原来的1000个imagenet对象进行分类。你知道吗

我需要一个关于这整件事的指针,那就是我如何准确地让一个预先训练好的模特教两张新的名人脸,同时保持它识别所有1000个imagenet对象的能力。你知道吗

谢谢!你知道吗


Tags: 数据对象模型falseincludetop名人内置
2条回答

通过迁移学习,您可以使用从新数据集学习的特征和模型从最初对其进行训练的数据集学习的特征,将训练过的模型分类到刚训练过的新类中。不幸的是,您无法使模型在所有类(原始数据集类+第二次使用的数据集类)之间进行分类,因为当您添加新类时,它只保留它们的权重用于分类。 但是,假设在实验中,你改变最后一层中输出神经元的数量(等于旧的+新的类的数量),那么它现在会给这些神经元随机的权重,这在预测时不会给你有意义的结果。你知道吗

关于建立新老班级分类模型的整个研究工作还处于探索阶段。 但是,实现它的一种方法是从零开始对整个数据(旧+新)进行训练。你知道吗

CNN在进行新领域的再训练时,容易忘记先前学习到的知识,这种现象常被称为灾难性遗忘,是一个活跃而富有挑战性的研究领域。你知道吗

说到这一点,让模型能够将新类和旧类一起分类的一个明显的方法是在累积的(旧+新)数据集上从头开始训练,这是非常耗时的。 另一方面,使用转移学习方法,冻结主干模型的权重进行特征提取,并使用新类/节点的目标数学习输出层的权重(从新数据集)。所以,我们失去了以前学到的知识。 最后,解决问题的一个变通方法(即使模型同时适用于新旧类)是连接新旧输出层,保持固定主干,如图所示: enter image description here

更准确地说,您可以用冻结的主干和输出层中旧的+新的类数构建新模型,然后以专门的方式加载前两个模型(预训练模型和新训练模型)的输出层权重。你知道吗

相关问题 更多 >

    热门问题