DAY49 预训练模型

目录

[1. 预训练的概念 (Concept of Pre-training)](#1. 预训练的概念 (Concept of Pre-training))

[2. 常见的分类预训练模型 (Common Models)](#2. 常见的分类预训练模型 (Common Models))

[3. 图像预训练模型的发展史 (Evolution History)](#3. 图像预训练模型的发展史 (Evolution History))

[4. 预训练的策略 (Pre-training Strategies)](#4. 预训练的策略 (Pre-training Strategies))

[5. 代码实战:ResNet18 适配 CIFAR-10](#5. 代码实战:ResNet18 适配 CIFAR-10)



1. 预训练的概念 (Concept of Pre-training)

  • 核心定义 :预训练是指利用在类似任务或大规模数据集上训练好的模型参数来初始化自己的模型,而不是从零开始(随机初始化)。这种思想被称为迁移学习。

  • 解决的问题:

    1. 收敛速度:好的初始值能大幅减少训练轮数。

    2. 避免局部最优:防止模型在训练初期陷入较差的局部最优解。

  • 任务划分 :预训练的过程称为上游任务 ,而在特定数据集上调整参数的过程称为微调(Fine-tuning)或下游任务。

  • 数据要求:通常要求在大规模数据集(如 ImageNet)上训练,因为只有海量数据才能支撑模型学习到通用的视觉特征。

2. 常见的分类预训练模型 (Common Models)

根据 notebook 的整理,主流预训练模型分为三类:

  • CNN架构:

    • VGGNet:结构简洁,由纯卷积堆叠而成,参数量巨大。

    • ResNet:引入残差连接解决深度网络中的梯度消失问题,是目前最常用的基准模型。

    • MobileNet:轻量级设计,采用深度可分离卷积,适合移动端部署。

    • EfficientNet:通过复合缩放自动寻找最优配置,准确率领先。

  • Transformer类 :如 ViT 、Swin Transformer,在处理大尺寸图像时表现优异,通常需要对图像进行上采样或调整 Patch 大小。

  • 自监督模型 :如 MoCo v3 、BEiT,无需人工标注,适合数据稀缺的场景。

3. 图像预训练模型的发展史 (Evolution History)

  • 早期探索(1990s) :以 LeNet-5 为代表,验证了 CNN 的可行性。

  • 深度学习复兴(2012-2015) :AlexNet 开启了 GPU 训练时代;VGG 加深了网络;GoogLeNet 引入了 Inception 多分支结构。

  • 超深网络时代(2015年后) :ResNet 解决了网络退化问题,使层数突破 100 层;后续模型转向效率优化 (MobileNet)、特征复用 (DenseNet)和自动化设计(EfficientNet)。

4. 预训练的策略 (Pre-training Strategies)

实现迁移学习通常需要遵循以下三个要点:

  1. 加载模型与权重:直接复用固定的模型结构及其训练好的参数。

  2. 适配输入与输出:

    • Resize:调整图像尺寸以适配模型要求。

    • 修改 Head:将最后的全连接层(FC)修改为符合下游任务类别数(如 CIFAR-10 的 10 类)。

  3. 阶段式训练:

    • 冻结阶段 :初期先锁住 Backbone(骨干网络),只训练新修改的 Head,防止随机初始化的权重破坏预训练的特征提取能力。

    • 解冻阶段:训练 5-10 个 epoch 后解冻所有层,进行全局微调。

5. 代码实战:ResNet18 适配 CIFAR-10

Notebook 通过 PyTorch 展示了完整的实战流程:

  • 模型构建 :使用 models.resnet18(pretrained=True) 加载权重,并将 model.fc 修改为输出 10 维。

  • 冻结控制 :通过遍历 model.named_parameters(),将除 'fc' 层外的参数 requires_grad 设为 False。

  • 训练调度 :定义了 train_with_freeze_schedule 函数,实现在 freeze_epochs 之后自动解冻参数并降低学习率进行精细调优。

  • 最终效果 :通过预训练模型,在 CIFAR-10 上仅微调 40 轮即可达到约 86.30% 的准确率,显著优于非预训练模型。


相关推荐
Ticnix2 分钟前
你的 Agent 聊到第 20 轮就"失忆"?你管理的是历史,高手管理的是上下文
后端·python·agent
Raspberry_Pi_官方账号13 分钟前
Raspberry Pi 官方分享:利用 14MB 的 Function-Calling LLM 实现端侧自然语言硬件控制
python·树莓派·raspberry pi
醇氧22 分钟前
CentOS7.9 Yum 安装 Redis6.x(RPM 包,无需编译,推荐 remi 源)
linux·python
VidDown30 分钟前
文件没问题但网页播不了:播放器接入实战与那些“环境问题
python·网络协议·音视频·视频编解码·视频
智购科技自动售货机工厂39 分钟前
数字人民币硬钱包支付失败,排查发现是NFC读卡器功率不足~YH
python·面试·架构·eclipse·emacs
维克兜率天1 小时前
【维克】均值回归:跌多了会涨,涨多了会跌
开发语言·笔记·python·算法·均值算法·回归·量化
databook1 小时前
用Pandas+Pydantic搭建数据清洗与验证管道
python·数据分析
yi0111 小时前
DAY 14: LeetCode 394. 字符串解码|递归和栈到底怎么处理嵌套?
数据结构·笔记·python·算法·leetcode
程序员的账号1 小时前
《Python工匠》资源分享
人工智能·python·深度学习·机器学习