CNN:微调小型网络与从大型网络中提取特征



详细说明:在什么情况下,微调小型网络的所有层(例如SqueezeNet)比特征提取或微调仅对大型网络的最后1或2个卷积层(例如inceptionV4)表现更好?

我的理解是两者所需的计算资源具有一定的可比性。我记得在一篇论文中读到,极端选项,即微调90%或10%的网络,比50%等更温和的选择要好得多。那么,当广泛实验不是一种选择时,默认选择应该是什么?

任何过去的实验和对结果的直观描述,研究论文或博客都会特别有用。谢谢。

我在训练像 SqueezeNet 这样的模型方面没有太多经验,但我认为只微调大网络的最后 1 层或 2 层要容易得多:你不必广泛搜索许多最佳超参数。迁移学习开箱即用,与 LR 查找器和fast.ai的周期性学习率配合

使用,效果非常好。 如果你想在训练后快速推理,那么最好训练SqueezeNet。如果新任务与 ImageNet 非常不同,也可能是这种情况。

来自 http://cs231n.github.io/transfer-learning/的一些直觉

  • 新数据集很小,与原始数据集类似。由于数据很小,由于过度拟合问题,微调 ConvNet 不是一个好主意。由于数据与原始数据相似,因此我们希望 ConvNet 中的更高级别特征也与此数据集相关。因此,最好的主意可能是在CNN代码上训练线性分类器。
  • 新数据集很大,与原始数据集类似。由于我们有更多的数据,我们可以更有信心,如果我们要尝试通过整个网络进行微调,我们不会过度拟合。
  • 新数据集很小,但与原始数据集有很大不同。由于数据很小,因此最好只训练线性分类器。由于数据集非常不同,因此最好从网络顶部训练分类器,其中包含更多特定于数据集的特征。相反,从网络中较早的某个地方激活训练 SVM 分类器可能会更好。
  • 新数据集很大,与原始数据集有很大不同。由于数据集非常大,我们可能期望我们可以从头开始训练ConvNet。然而,在实践中,使用预训练模型中的权重进行初始化通常仍然是有益的。在这种情况下,我们将有足够的数据和信心来微调整个网络。

最新更新