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% 的准确率,显著优于非预训练模型。


相关推荐
benchmark_cc28 分钟前
用 QuantDash 读取美股行情:AAPL.US 的运行前检查、排错顺序与数据校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash
羲云网络4 小时前
GPT Image 2.6 接入指南:Flare、Sunburst 怎么选,编辑失败如何排查
人工智能·python·aigc·图像生成·acedatacloud
橙橙笔记7 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
小小张说故事7 小时前
Python 的 class 语句到底执行了什么?拆开 __prepare__、metaclass.__new__ 和那个被讲反的 __set_name__ 顺序
python
天天被压力9 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
天天被压力9 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python
特立独行的猫A10 小时前
AI 时代,我为什么推荐用 cj-tauri 开发桌面应用
java·后端·python
小lo想吃棒棒糖10 小时前
把机器人训练从 GPU 搬到昇腾 NPU:启元 Q1 起身动作 PPO 训练全记录
python·机器人·昇腾·启元机器人
Thanks_ks10 小时前
【第 006 讲】搭建 PyCharm 开发环境:PyCharm 的下载与安装 | 初始设置与常用配置
ide·python·pycharm·开发工具·jetbrains·开发环境·集成开发环境
青少儿编程课堂11 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛