19 卷积神经网络(CNN)之迁移学习与预训练模型
系列进度
计算机视觉网络教程 · 第 19 / 31 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
迁移学习适合数据不多但任务相近的视觉场景。先复用通用特征,再训练自己的任务头,通常比从零训练稳定。
我会确认冻结了哪些层、训练了哪些层、学习率是否分组设置。微调不清楚,预训练模型很容易被破坏。
在前一篇我们探讨了卷积神经网络(CNN)的架构与模型设计,为后续深入的目标检测与识别打下了良好的基础。本篇将重点讨论迁移学习和预训练模型,它们是提高模型性能与减少训练时间的重要手段。
迁移学习:概述
迁移学习是一种社会化学习方法,旨在利用在一个任务上学到的知识来改善在另一个相关但不同任务上的学习效果。在计算机视觉中,迁移学习尤其常用,因为许多视觉任务具有相似特征,例如从动物图像中学习的特征可以帮助识别植物图像。
使用迁移学习与预训练模型时,先看源任务、目标数据规模、特征层冻结、学习率、验证指标和过拟合风险。
为什么使用迁移学习?
- 数据不足:当目标任务的数据量相对少时,使用已经在大量数据上训练好的模型可以显著提高性能。
- 较短的训练时间:使用预训练的模型可以减少从头训练的时间。
- 普遍有效的特征:许多视觉特征是通用的,因此迁移学习可以有效地提取和利用这些特征。
预训练模型
预训练模型是指在大型数据集(如ImageNet)上训练的模型,这些模型可以被用于其他相似的视觉任务。常见的预训练模型有:
《卷积神经网络(CNN)之迁移学习与预训练模型》读到最后,可以把图里的流程当成检查表:问题是否明确,操作是否落地,判断标准是否能复用。
- VGG16:由于其简单的架构和较强的表现,被广泛作为基础模型。
- ResNet:通过引入残差连接来解决深层网络的退化问题,提升了模型的性能。
- Inception:引入了多尺度卷积操作,提高了网络的表达能力。
下面是如何使用一个预训练模型(例如VGG16)进行迁移学习的示例。
实践案例:使用VGG16进行迁移学习
我们将使用Keras库和TensorFlow后端完成这个案例。
import tensorflow as tf
from tensorflow.keras.applications import VGG16
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.models import Model
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 加载VGG16模型,去掉顶层
base_model = VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
# 冻结卷积基
for layer in base_model.layers:
layer.trainable = False
# 自定义顶部模型
x = Flatten()(base_model.output)
x = Dense(256, activation='relu')(x)
predictions = Dense(10, activation='softmax')(x) # 假设我们有10个类别
# 创建最终模型
model = Model(inputs=base_model.input, outputs=predictions)
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 数据预处理
train_datagen = ImageDataGenerator(rescale=1.0/255)
train_generator = train_datagen.flow_from_directory(
'data/train',
target_size=(224, 224),
batch_size=32,
class_mode='categorical'
)
# 训练模型
model.fit(train_generator, epochs=10)
以上代码解释:
- 加载与定义基础模型:引入VGG16,设置
include_top=False表示不加载顶层分类输出层。 - 冻结卷积基:在迁移学习中,我们通常冻结原始模型的卷积层,只训练新增的顶层。
- 自定义顶层:我们可以根据目标任务的类别数量添加新的全连接层。
- 编译与训练:使用合适的优化器和损失函数进行模型编译,并在目标数据集上进行训练。
迁移学习的注意事项
- 学习率设置:使用迁移学习时,建议使用较低的学习率进行fine-tuning。
- 数据增强:可以通过数据增强技术来扩充训练样本,增加模型的泛化能力。
- 选择合适的模型:根据任务的复杂度选择合适的预训练模型。
回看《卷积神经网络(CNN)之迁移学习与预训练模型》时,不必一次做大项目,先用一条简单样例确认主线是否清楚。
如果《卷积神经网络(CNN)之迁移学习与预训练模型》还没完全消化,可以从这张卡片的四个动作重新走一遍。
在接下来的篇章中,我们将继续深入探讨目标检测与识别,具体介绍各种对象检测算法,包括YOLO和Faster R-CNN等。望通过迁移学习与预训练模型的充分利用,为提升检测性能做好准备。
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
卷积神经网络(CNN)之迁移学习与预训练模型适合谁读?
这是 计算机视觉网络教程 系列第 19 / 31 篇,适合正在学习计算机视觉网络教程,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇计算机视觉网络教程要多久?
按中文技术文章阅读速度估算,通读大约 3 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读