在进行迁移学习时,我们需要冻结哪些初始层,以及我应该如何更改我的任务的最后一层?

人工智能 卷积神经网络 迁移学习 微调 单次多盒检测器
2021-11-05 23:25:56

我想训练一个神经网络来检测单个类,但我会扩展它来检测更多类。为了解决这个任务,我选择了 PyTorch 框架。

我遇到了迁移学习,我们用新数据微调预训练的神经网络。有一个很好的 PyTorch 教程来解释迁移学习我们也有Single Shot Detector (SSD) 的 PyTorch 实现另请参阅使用 Pytorch 的 Single Shot MultiBox Detector — 第 1 部分

这是我现在的情况

  • 我想用来微调神经网络的数据与最初用于训练神经网络的数据不同;更具体地说,神经网络最初是用 20 个类别的数据集训练的

  • 我目前有一个非常小的标记训练数据集。

要使用迁移学习解决这个问题,解决方案是冻结初始层的权重,然后在冻结这些层的情况下训练神经网络。

但是,我对初始层是什么以及如何更改神经网络的最后一层来解决我的特定任务感到困惑。所以,这是我的问题。

  1. 在这种情况下,初始层是什么?我该如何冷冻它们?

  2. 在训练 NN 对一个或多个新类进行分类时,我需要做哪些更改?

1个回答

在网上大量浏览这些问题的答案后,这就是我想出的。

  1. 在这种情况下,初始层是什么?我该如何冷冻它们?

据说最初的几层可以提取任何类型图像的最一般特征,例如对象的边缘或角落。所以,我想这实际上取决于您选择的骨干架构类型。

如何冻结图层取决于我们使用的框架。

(我选择了 PyTorch作为框架。我发现本教程Some important Pytorch tasks - A concise summary from a vision researcher,似乎很有用。)

  1. 在训练 NN 对一个或多个新类进行分类时,我需要做哪些更改?

我只需要将最后一层中的神经元(或单元)的数量更改为新数据集包含的类/对象的数量。