Sye*_*mza 4 python classification deep-learning keras tensorflow
再会!
我有一个名人数据集,我想在其中微调 keras 内置模型。到目前为止,我已经探索和完成了,我们移除了原始模型的顶层(或者最好通过 include_top=False)并添加我们自己的层,然后训练我们新添加的层,同时保持之前的层冻结。这整个事情很像直觉。
现在我需要的是,我的模型学会识别名人面孔,同时还能够检测它之前训练过的所有其他对象。最初,在 imagenet 上训练的模型带有 1000 个神经元的输出层,每个神经元代表一个单独的类。我对它应该如何检测新类感到困惑?所有的迁移学习和微调文章和博客都告诉我们用不同的 N 神经元层(N = 新类的数量)替换原来的 1000 个神经元输出层。就我而言,我有两个名人,所以如果我有一个带有 2 个神经元的新层,我不知道模型将如何对原始的 1000 个 imagenet 对象进行分类。
我需要一个关于这整个事情的指针,我究竟如何才能让一个预训练的模型教两个新的名人面孔,同时还保持其识别所有 1000 个 imagenet 对象的能力。
谢谢!
CNN 在为新领域的新任务重新训练时很容易忘记以前学到的知识,这种现象通常称为灾难性遗忘,这是一个活跃且具有挑战性的研究领域。
说到这一点,使模型能够将新类别与旧类别一起分类的一种明显方法是在累积的(旧+新)数据集上从头开始训练(这很耗时。)
相比之下,近年来在(类增量)持续学习的文献中提出了几种替代方法来解决这种情况:

通过迁移学习,您可以使用从新数据集中学到的特征以及模型从最初训练的数据集中学到的特征,使训练后的模型在刚刚训练的新类之间进行分类。不幸的是,您无法使模型在所有类(原始数据集类+第二次使用的数据集类)之间进行分类,因为当您添加新类时,它仅保留它们的权重用于分类。但是,假设您在实验中更改了最后一层中输出神经元的数量(等于旧类 + 新类的数量),那么它现在将为这些神经元赋予随机权重,而这在预测中不会给您带来有意义的结果。
制作模型在新旧类别实验之间进行分类的整个过程仍然处于研究领域。然而,实现这一目标的一种方法是在整个数据(旧数据+新数据)上从头开始训练模型。