通过连接最后一个分类层进行迁移学习

数据挖掘 深度学习 喀拉斯 张量流 迁移学习
2021-10-12 21:59:40

在讨论一个明显的 XY 问题之前,我将向您解释我正在尝试做什么。

我正在训练一个使用 Imagenet 预训练的简单 MobileNet 以进行多类分类。我所做的是冻结所有卷积部分,然后创建一个新的预测层(conv2D 1x1xN,其中 N 是类数)。

假设我训练了 5 个类,然后我得到了 5 个新类的一组新图像。我想保留上次培训的知识,并且只能在新课程中进行培训。

我所做的是用相同的冻结预训练权重训练一个新模型,但只使用新的 5 个类,然后将旧模型和新模型的权重连接到最后一层,输出 10 个类。

串联工作完美,但是当我运行评估时,我得到了可怕的准确性(就像它是随机预测的一样)。例如,对于在 5 个“集合”中训练的 30 个班级,我的准确率为 0.03。

我正在做的事情可行吗?我认为可能导致这种情况的一个问题是,每个预测的“标签”没有保持相同的顺序或其他东西,因此即使我复制权重,预测也可能是无序的。

1个回答

事实证明,这是与模型中加载的类的顺序有关的问题。

假设我有以下结构

root
  -train1
    +a
    +r
  -train2
    +b
    +y
  -all
    +a
    +r
    +b
    +y

其中ar是类(带有图像的文件夹)by我首先用 处的那些进行训练train1,因此网络将每个输出分配给一个类。然后我用第二个训练文件夹训练第二个网络(除了最后一个预测层以外的所有东西都冻结了)train2

预测层的输出顺序将根据算法而变化,但假设它以排序方式加载路径:

在第一个网络中,第一个输出是 for a,第二个是 for r

在第二个网络中,第一个输出为b,第二个输出为y,当连接到第一个网络时,它将是a, r, b, y

当我加载整个(合并的)模型,并加载一个文件夹将所有类都放在(all)中时,网络假定输出a, b, r, y按此顺序排列,而串联网络则a, r, b, y作为输出顺序。

在这个例子中, 和 的输出ay处于相同的位置,而rb将被反转,这将导致精度不佳。

TL;博士:

在执行“增量学习”时加载类的顺序需要始终相同,因此请注意加载类的顺序。