news 2026/3/20 10:01:38

Day 47 预训练模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day 47 预训练模型

@浙大疏锦行

一、预训练核心概念

1.预模型的定义

对比人类学习:

  • 预训练 = 九年义务教育(学通用知识:语文、数学、基础科学);
  • 你的具体任务 = 大学专业课(比如计算机、医学);
  • 直接从头训练 = 跳过九年义务教育,直接学专业课(效率低、学不会)。

在深度学习中,预训练是指:

针对某一类通用任务(如图像特征提取),在大规模通用数据集(如 ImageNet、COCO)上,用大量算力训练一个基础模型(如 ResNet、VGG),让模型学习到该领域的通用特征表示能力;训练完成后,保存模型的权重参数(即 “预训练权重”),后续针对具体任务(如猫狗分类),直接复用这些权重,无需从零开始训练。

核心关键词拆解:

关键词解释(CV 场景)
大规模通用数据集不是你的小众任务数据(如几百张猫狗图),而是覆盖范围广的数据集(如 ImageNet 含 1000 类自然图像)
通用特征表示模型学到的不是 “识别猫 / 狗”,而是 “识别边缘、纹理、圆形、方形、物体轮廓” 等所有图像共有的特征
预训练权重训练完成后保存的模型参数(.pth 文件),是 “通用知识” 的载体
复用后续任务直接加载这些权重,不用从随机初始化的参数开始训

2.预训练的核心逻辑

CNN 的特征提取规律是 “从通用到专属”:

  1. 底层卷积层:学通用特征(边缘、纹理、颜色)—— 所有图像任务都需要;
  2. 高层卷积层:学专属特征(物体部件、场景)—— 不同任务有差异。

预训练的本质就是:用海量数据把 “底层通用特征” 学透(这一步需要大量算力和数据,个人 / 小团队做不到),后续任务只需要在这个基础上,微调高层特征适配自己的任务即可。

3.预训练的核心价值

  1. 解决 “数据不足” 问题:你的任务可能只有几千张样本(如自定义猫狗分类),从零训练 CNN 会过拟合,但复用预训练权重,几千张样本也能训出高精度模型;
  2. 节省算力 / 时间:训练 ResNet18 在 ImageNet 上需要几十 / 上百 GPU 小时,个人复现几乎不可能,直接用预训练权重,几分钟就能加载完成;
  3. 提升模型泛化能力:预训练学到的通用特征,能让模型适应不同场景的图像(比如不同角度的猫、不同光线的狗);
  4. 降低入门门槛:不用从零设计模型、调参,基于预训练模型就能快速落地任务。

4. 常用预训练模型(PyTorch 内置)

模型名特点适用场景
ResNet18/34轻量、速度快、精度适中中小数据集、普通分类任务
ResNet50/101精度高、参数量大高精度要求、大数据集
MobileNetV2超轻量、移动端适配部署场景(低算力)
VGG16/19结构简单、特征提取能力强学术研究、特征提取

二、核心预训练策略

策略 1:纯特征提取(Freeze All Backbone)

1. 定义

冻结预训练模型的所有主干层(卷积层、Transformer 层等),仅训练新增的 “分类头 / 任务头”(全连接层)—— 主干层只负责提取通用特征,不做任何修改。

2. 适用场景

  • 数据集极小(几千张样本,如小批量的猫狗分类、自定义手写字符);
  • 新任务与预训练数据集(如 ImageNet)差异大(如 MNIST 手写数字 vs ImageNet 自然图像);
  • 算力有限(CPU / 低配 GPU),无法承担大量计算。

3. 实操方法

import torch import torch.nn as nn from torchvision import models # 加载ResNet18预训练模型 model = models.resnet18(pretrained=True) # 核心:冻结所有主干层参数(不计算梯度) for param in model.parameters(): param.requires_grad = False # 仅修改并训练分类头 in_features = model.fc.in_features model.fc = nn.Linear(in_features, 2) # 适配猫狗分类(2类) # 优化器:仅优化分类头参数(主干层无梯度,无需优化) optimizer = torch.optim.Adam(model.fc.parameters(), lr=1e-3)

4. 优缺点

优点缺点
训练速度极快(仅训少量参数)无法适配新任务的专属特征,精度上限低
完全避免过拟合(主干层无更新)对差异大的任务,通用特征可能不适用
算力要求极低(CPU 也能训)-

策略 2:分层微调(Unfreeze Top Layers)

1. 定义

不冻结全部主干层,仅解冻预训练模型的后几层(高层),前几层(低层)保持冻结 —— 因为:

  • 低层(前几层):学习的是通用特征(边缘、纹理、颜色),所有图像任务都适用,无需修改;
  • 高层(后几层):学习的是专属特征(物体部件、场景),需要适配新任务。

2. 适用场景

  • 数据集中等(几万张样本,如常规的猫狗分类、花卉分类);
  • 新任务与预训练数据集有一定相似度(如自然图像分类 vs ImageNet);
  • 算力中等(入门级 GPU,如 RTX 3060)。

3. 实操方法

model = models.resnet18(pretrained=True) # 核心:仅解冻最后2个卷积块(高层),冻结前几层 # ResNet18的层结构:conv1 → layer1 → layer2 → layer3 → layer4 → fc for name, param in model.named_parameters(): # 仅解冻layer3、layer4(高层) if "layer3" in name or "layer4" in name: param.requires_grad = True else: param.requires_grad = False # 修改分类头 model.fc = nn.Linear(model.fc.in_features, 2) # 优化器:分层设置学习率(高层小学习率,分类头大学习率) optimizer = torch.optim.Adam([ {"params": model.layer3.parameters(), "lr": 1e-4}, # 高层:小学习率(避免破坏预训练权重) {"params": model.layer4.parameters(), "lr": 1e-4}, {"params": model.fc.parameters(), "lr": 1e-3} # 分类头:大学习率(全新层) ])

4. 优缺点

优点缺点
平衡精度和速度(仅训部分参数)需要调试 “解冻层数”(如解冻 2 层 / 3 层),无统一标准
适配任务专属特征,精度显著提升比纯特征提取稍费算力
不易过拟合(前几层仍冻结)-

策略 3:全量微调(Unfreeze All Layers)

1. 定义

解冻预训练模型的所有层,主干层 + 分类头一起训练 —— 让预训练模型在保留通用特征的基础上,完全适配新任务的专属特征。

2. 适用场景

  • 数据集大(几十万 / 百万张样本,如大规模电商商品分类);
  • 新任务与预训练数据集高度相似(如动物分类 vs ImageNet);
  • 算力充足(中高端 GPU,如 RTX 4090/A100)。

3. 实操方法

model = models.resnet18(pretrained=True) # 核心:解冻所有层(默认requires_grad=True,无需额外设置) # for param in model.parameters(): # param.requires_grad = True # 修改分类头 model.fc = nn.Linear(model.fc.in_features, 2) # 优化器:全量小学习率(关键!避免破坏预训练权重) optimizer = torch.optim.Adam(model.parameters(), lr=1e-4) # 比分类头单独训小10倍

4. 优缺点

优点缺点
精度上限最高(完全适配新任务)训练速度慢(训全部参数),算力要求高
能挖掘任务的专属特征易过拟合(数据集小时)
-易破坏预训练的通用特征(学习率过大时)

策略 4:增量预训练(Domain Adaptation)

1. 定义

先在新任务的 “领域数据集”上对预训练模型做 “增量训练”(仅训主干层,不训分类头),再冻结主干层训练分类头 —— 解决 “预训练数据集与新任务领域差异大” 的问题。

2. 适用场景

  • 新任务领域特殊(如医学影像、遥感图像、工业缺陷检测),与 ImageNet 差异极大;
  • 有一定规模的 “领域无标签 / 有标签数据”(如几千张医学影像)。

3. 实操方法

# 步骤1:加载预训练模型,冻结分类头,增量训练主干层 model = models.resnet18(pretrained=True) # 冻结分类头(仅训主干层) for param in model.fc.parameters(): param.requires_grad = False # 用领域数据集(如医学影像)训练主干层(适配领域特征) optimizer = torch.optim.Adam(model.parameters(), lr=1e-4) # 训练若干轮(如5轮)→ 主干层适配医学影像特征 # 步骤2:冻结主干层,训练分类头(医学影像分类) for param in model.parameters(): param.requires_grad = False model.fc = nn.Linear(model.fc.in_features, 5) # 5类医学影像 optimizer = torch.optim.Adam(model.fc.parameters(), lr=1e-3) # 训练分类头

4. 优缺点

优点缺点
解决 “领域差异大” 的问题,精度显著提升需要额外的领域数据集
保留预训练通用特征,同时适配领域特征多一轮训练,耗时更长
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/14 14:48:50

终极MOD管理指南:3步彻底解决游戏贴图兼容性问题

终极MOD管理指南:3步彻底解决游戏贴图兼容性问题 【免费下载链接】d3dxSkinManage 3dmigoto skin mods manage tool 项目地址: https://gitcode.com/gh_mirrors/d3/d3dxSkinManage 还在为游戏MOD贴图错误而烦恼吗?当游戏更新到新版本时&#xff0…

作者头像 李华
网站建设 2026/3/18 7:37:35

OFDRW技术解密:3大核心能力重塑国产文档处理新范式

还记得那个让你加班到深夜的公文处理项目吗?复杂的格式要求、繁琐的审批流程,再加上各种文档兼容性问题,简直让人头疼不已。但今天,我要告诉你一个秘密武器——OFDRW开源库,这个基于GB/T 33190-2016标准的国产版式文档…

作者头像 李华
网站建设 2026/3/15 10:25:01

Hotkey Detective:5步解决Windows热键冲突的完整方案

Hotkey Detective:5步解决Windows热键冲突的完整方案 【免费下载链接】hotkey-detective A small program for investigating stolen hotkeys under Windows 8 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 当你在Windows系统中设置的全局…

作者头像 李华
网站建设 2026/3/15 8:50:32

Applite:Mac软件管理的终极图形化解决方案

还在为复杂的终端命令而烦恼吗?Applite这款用户友好的GUI macOS应用程序为您提供了一键安装、批量更新和彻底卸载的全新体验。作为Homebrew Casks的图形化界面工具,它让软件管理变得前所未有的简单直观。 【免费下载链接】Applite User-friendly GUI mac…

作者头像 李华
网站建设 2026/3/15 17:28:56

如何用GPT-SoVITS生成带情绪的语音输出?

如何用 GPT-SoVITS 生成带情绪的语音输出? 在虚拟主播直播时突然切换成“愤怒”语气怒斥弹幕,或是心理陪伴机器人轻声细语地安慰用户——这些不再是科幻场景。如今,借助像 GPT-SoVITS 这样的开源语音合成技术,我们已经可以用短短…

作者头像 李华
网站建设 2026/3/17 10:04:51

云顶之弈进阶指南:用悬浮助手告别信息焦虑

每次玩云顶之弈时,你是否也遇到过这样的困境:装备合成公式记不住,羁绊效果搞不清楚,经济运营一团糟?这些问题正是阻碍大多数玩家突破瓶颈的关键因素。今天介绍的这款云顶之弈悬浮助手,正是为了解决这些痛点…

作者头像 李华