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