预训练网络与迁移学习
训练 CNN 需要耗费大量时间,并且需要大量数据。然而,大部分时间都花在学习网络可以用来从图像中提取模式的最佳低级滤波器上。一个自然的问题是:我们是否可以使用一个在某个数据集上训练过的神经网络,并将其…
课程内容
预训练网络与迁移学习
训练 CNN 需要耗费大量时间,并且需要大量数据。然而,大部分时间都花在学习网络可以用来从图像中提取模式的最佳低级滤波器上。一个自然的问题是:我们是否可以使用一个在某个数据集上训练过的神经网络,并将其适配到不同的图像分类任务,而无需完整的训练过程?
课前测验
这种方法被称为迁移学习,因为我们将一个神经网络模型的一些知识转移到另一个模型中。在迁移学习中,我们通常从一个预训练模型开始,该模型已经在某个大型图像数据集(例如 ImageNet)上进行了训练。这些模型已经能够很好地从通用图像中提取不同的特征,在许多情况下,仅仅在这些提取的特征之上构建一个分类器就可以取得不错的效果。
✅ 迁移学习是一个在其他学术领域(如教育)中也会遇到的术语,它指的是将一个领域的知识应用到另一个领域的过程。
预训练模型作为特征提取器
我们在上一节中讨论的卷积网络包含多个层,每一层都旨在从图像中提取一些特征,从低级像素组合(例如水平/垂直线或笔画)到高级特征组合(例如火焰的眼睛)。如果我们在足够大的通用和多样化图像数据集上训练 CNN,网络应该能够学习提取这些常见特征。
Keras 和 PyTorch 都包含函数,可以轻松加载一些常见架构的预训练神经网络权重,这些权重大多是在 ImageNet 图像上训练的。最常用的架构在上一课的 CNN Architectures 页面中有描述。特别是,你可以考虑使用以下模型之一:
- VGG-16/VGG-19 是相对简单的模型,但仍然具有良好的准确性。通常使用 VGG 作为初步尝试是一个不错的选择,可以看看迁移学习的效果如何。
- ResNet 是微软研究院在 2015 年提出的一系列模型。它们有更多的层,因此需要更多资源。
- MobileNet 是一系列尺寸较小的模型,适合移动设备。如果资源有限并且可以牺牲一些准确性,可以使用它们。
以下是 VGG-16 网络从一张猫的图片中提取的示例特征:

猫与狗数据集
在这个例子中,我们将使用一个猫与狗数据集,这非常接近真实的图像分类场景。




