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

时间:2018-03-08 17:23:16

标签: tensorflow computer-vision deep-learning conv-neural-network

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

我的理解是两者所需的计算资源有些可比。我记得在paper中读到极端的选项,即微调90%或10%的网络要比50%的温和要好得多。那么,在进行广泛试验时,默认选择应该是什么呢?

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

1 个答案:

答案 0 :(得分:2)

我在像SqueezeNet这样的训练模型方面没有太多经验,但我认为仅对大型网络的最后1层或2层进行微调要容易得多:您不必广泛搜索许多最优超参数。通过LR查找器和fast.ai的循环学习速率,转移学习开箱即用。

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

来自http://cs231n.github.io/transfer-learning/

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