首页 文章

预训练卷积神经网络的微调[关闭]

提问于
浏览
0

当我阅读和搜索 fine tuning of pre-trained network 时,它是按照以下两个步骤完成的(简而言之):

  • 冻结隐藏层并解冻完全连接的层并进行训练 .

  • 解冻两个层并再次训练 .

我的问题是:

  • 仅仅执行第一步是否足够?

  • 如果我只进行第一步,是否与 network as a feature extractor 方法不一样?

(网络作为特征提取器方法是,使用预训练网络提取特征并使用传统机器学习分类算法对其进行分类) .

如果您想了解更多信息以澄清问题,请告诉我 .

1 回答

  • 1

    您的问题存在一些问题......

    首先,你明确暗示一个只有2层的网络,这与现在在实践中实际使用微调的方式相当(非常) .

    第二,你的第一个问题中的“足够”究竟是什么意思(足够的是什么)?


    实际上,预训练模型,特征提取器和微调的概念之间存在足够的重叠,并且不同的人甚至可能以不完全相同的方式使用所涉及的术语 . 斯坦福大学采用的一种方法是将所有这些视为更为通用的特殊案例 transfer learning ;这是一个有用的excerpt,来自上述课程的相应部分,可以说是你的问题的精神(如果不是字母):

    三种主要的转移学习方案如下所示:ConvNet作为固定特征提取器 . 在ImageNet上预先训练一个ConvNet,删除最后一个完全连接的层(该层的输出是ImageNet等不同任务的1000个等级分数),然后将其余的ConvNet视为新数据集的固定特征提取器 . 在AlexNet中,这将为包含紧接在分类器之前的隐藏层的激活的每个图像计算4096-D向量 . 我们将这些功能称为CNN代码 . 如果它们在ImageNet上的ConvNet训练期间也被阈值处理(通常是这种情况),那么这些代码是ReLUd(即阈值为零)对性能很重要 . 为所有图像提取4096-D代码后,为新数据集训练线性分类器(例如线性SVM或Softmax分类器) . 微调ConvNet . 第二种策略是不仅在新数据集上替换和重新训练ConvNet之上的分类器,而且还通过继续反向传播来微调预训练网络的权重 . 可以微调ConvNet的所有层,或者可以保留一些早期层(由于过度拟合问题)并且仅微调网络的某些更高级别部分 . 这是因为观察到ConvNet的早期特征包含更多通用特征(例如边缘检测器或颜色斑点检测器),这些特征应该对许多任务有用,但后来的ConvNet层逐渐变得更加特定于类的细节 . 包含在原始数据集中 . 例如,对于包含许多犬种的ImageNet,ConvNet的代表性功能的很大一部分可以用于特定于区分狗品种的特征 . 预训练模型 . 由于现代ConvNets需要2-3周的时间来训练ImageNet上的多个GPU,因此通常会看到人们发布他们的最终ConvNet检查点,以便其他可以使用网络进行微调的人获益 . 例如,Caffe库有一个模型动物园,人们可以在这里共享网络权重 . 何时以及如何微调?您如何确定应在新数据集上执行哪种类型的转移学习?这是几个因素的函数,但最重要的两个因素是新数据集的大小(小或大),以及它与原始数据集的相似性(例如ImageNet类似于图像和类的内容,或者非常不同,例如显微镜图像) . 请记住,ConvNet功能在早期图层中更通用,在后续图层中更具原始数据集特性,以下是导航4种主要场景的一些常用经验法则:新数据集很小且与原始数据集类似 . 由于数据很小,因为过度拟合问题而对ConvNet进行微调并不是一个好主意 . 由于数据类似于原始数据,我们期望更高级别的功能ConvNet也与此数据集相关 . 因此,最好的想法可能是在CNN码上训练线性分类器 . 新数据集很大,与原始数据集类似 . 由于我们有更多的数据,我们可以更有信心,如果我们试图通过整个网络进行微调,我们就不会过度配备 . 新数据集很小但与原始数据集非常不同 . 由于数据很小,因此最好只训练线性分类器 . 由于数据集非常不同,因此最好从网络顶部训练分类器,其中包含更多数据集特定的功能 . 相反,在网络早期的某个地方训练SVM分类器可能会更好 . 新数据集很大,与原始数据集非常不同 . 由于数据集非常大,我们可以预期我们可以从头开始训练ConvNet . 然而,在实践中,使用来自预训练模型的权重进行初始化通常仍然是有益的 . 在这种情况下,我们将有足够的数据和信心来微调整个网络 .

相关问题