【零基础学AI】第 24 章——卷积网络与迁移学习

发布时间:2026/11/5 7:48:11

【零基础学AI】第 24 章——卷积网络与迁移学习 第 24 章 卷积网络与迁移学习文章目录第 24 章 卷积网络与迁移学习 关于《AI 零基础 36 讲》四个权重怎样扫过一张图池化留下什么又丢掉什么看清本章网络的每个尺寸预训练给新任务带来什么冻结和微调分别改变哪些参数用同一份目标数据比较遇到报错时先查头和梯度上一章把 8×8 图片展平成 64 个数。全连接层能够学习分类但展平后的数组没有直接告诉网络哪些像素互相挨着。一个短横笔画可能出现在图片左边也可能出现在右边。我们能否用同一组计算在不同位置检查它。卷积从这个问题开始。本章先算一个小矩阵再训练一个小型卷积网络。随后把它在十类数字任务中学到的参数用于新的奇偶分类比较从头训练、冻结迁移和微调的实际结果。全部步骤都在 CPU 上完成。 关于《AI 零基础 36 讲》零基础也能开始学 AI《AI 零基础 36 讲》是一套面向初学者的 AI 入门教程。课程从认识和使用 AI 开始逐步学习Python、数据处理、机器学习与深度学习再进入大模型应用开发最后完成个人知识库助手的综合实践。本篇是正式讲解文章通过具体例子、原创图示和操作结果讲清概念。涉及编程的章节提供可运行代码方便你边读边试。读完以后动手检验建议按专栏顺序学习并完成对应的课后训练检查自己能否独立运用本章知识。博客专栏《AI 零基础 36 讲》四个权重怎样扫过一张图先用一张 4×4 的原创教学矩阵值为 0 至 3暂时不考虑真实数字。卷积核为[[1, 0], [0, -1]]。把这个 2×2 核盖住左上角四个数相应位置相乘后相加就得到输出的第一格。第一格计算为1×1 0×0 0×0 3×(-1) -2。向右移动一格后覆盖的输入变为[[0, 2], [3, 0]]输出为 0。核的权重没有变化变化的是它覆盖的图片位置。行内算完后向下移动继续计算。图使用步长 1没有填充和偏置。4×4 输入只能放下 3×3 个完整的 2×2 窗口所以输出为 3×3。这里把输出叫作特征图同一组权重在不同位置产生不同响应。按 PyTorch 的实现核没有在计算前翻转严格说这一步采用互相关规则。importnumpyasnpimporttorchfromexamples.conv_coreimportTEACHING_IMAGE,TEACHING_KERNEL,manual_correlation manualmanual_correlation(TEACHING_IMAGE,TEACHING_KERNEL)actualtorch.nn.functional.conv2d(torch.tensor(TEACHING_IMAGE)[None,None],torch.tensor(TEACHING_KERNEL)[None,None])print(manual)print(np.array_equal(manual,actual[0,0].numpy()))输出三行为[-2, 0, 1]、[0, 1, 0]、[0, 0, 0]最后为True。随附逐格计算表列出了每格的输入与结果。手算的循环和 PyTorch 运算分别实现二者逐值一致。训练中的核由数据学习通常无需手工规定它只查横线或竖线。某个核是否学到某种笔画要结合响应实际观察不能仅凭它叫“卷积核”就给它安排一个固定含义。多个输出通道使用多组核因此同一张图能产生多张特征图。池化留下什么又丢掉什么最大池化取一个小区域中的最大值。本章使用 2×2 窗口步长也为 2。拿刚才的 4×4 输入做演示四个互不重叠的区域分别留下 3、2、1、2输出尺寸变成 2×2。importtorchfromexamples.conv_coreimportTEACHING_IMAGE pooledtorch.nn.MaxPool2d(2)(torch.tensor(TEACHING_IMAGE)[None,None])print(pooled[0,0])结果为[[3, 2], [1, 2]]。这是一个方便手算的单独池化例子。实际网络中的池化接收 ReLU 后的卷积特征图。池化减少后续计算所需的空间尺寸也会丢失区域内的部分位置与数值。一个区域中有明显响应时最大值仍可能被保留但它没有保存区域内所有细节。不能把这种处理理解成对任意平移或旋转都不敏感。看清本章网络的每个尺寸真实图片仍是第 23 章的 8×8 灰度数字。本章卷积层使用 8 组 3×3 核步长 1四周补一圈零保持空间尺寸为 8×8。经过 ReLU 和 2×2 池化后得到 8 张 4×4 特征图展平为 128 个数再经过 32 节点隐藏层最后交给分类头。importtorchfromexamples.conv_coreimportTinyCNN modelTinyCNN(2)valuetorch.zeros(4,1,8,8)forlayerinmodel.features:valuelayer(value)print(type(layer).__name__,tuple(value.shape))print(分类头,tuple(model.head(value).shape))尺寸依次为(4, 8, 8, 8)、(4, 8, 8, 8)、(4, 8, 4, 4)、(4, 128)、(4, 32)、(4, 32)分类头输出(4, 2)。前面的 4 始终是图片数量。卷积的特点是局部连接和参数共享。3×3 核一次计算附近的九个像素同一组权重在整张图上重复使用。全连接层则为每个输入位置与输出节点建立各自的权重。卷积可保留邻近关系并复用局部计算后面仍可以接全连接分类头。本章二类网络共 4274 个参数反而多于上一章十类全连接网络的 2410 个参数因为我们增加了层和通道。不同结构的具体参数量要算出来不能仅凭“用了卷积”就断言整个模型更小。预训练给新任务带来什么预训练是在源任务上先学习一组参数。迁移时把这些参数作为新任务的起点或者固定它们只训练新的分类部分。官方 迁移学习教程介绍了这两种常见用法。本章借用这个思路采用自行训练的小模型避免下载大型权重。我们把 1797 张公开图按固定种子 2026 重新安排用途。每个数字抽 100 张用于十类数字预训练、12 张用于目标训练、20 张用于目标测试剩余图片不用。这次角色划分与上一章的训练测试划分不同但各角色原始编号互不重叠数量如下。角色图片数标签用途源任务1000数字 0 至 9学习卷积与隐藏层参数目标训练120偶数 0、奇数 1学习新分类任务目标测试200偶数 0、奇数 1固定训练结束后评估未使用477保留原标签不进入训练或评估我们自己定义奇偶标签并生成target_train/even、target_train/odd和相应测试目录形成小型自定义图片集。图片内容仍来自公开数据采用 CC BY 4.0署名和转换说明见数据记录。自定义标签没有改变原数字真值也没有生成新的真实测量数据。源任务训练 30 轮后把特征部分保存到pretrained-digits.pt。随后从文件读回特征复制到目标网络源任务的十类头丢弃新建一个二类头。虽然奇偶答案可以通过已知数字标签算出目标模型实际接收的只有图片。数字标签仅用于编制清单和核对答案没有作为额外特征输入。源任务训练集达到 1000/1000 正确这只能说明它对源训练图拟合得好。本章没有另设源任务独立测试集也没有声称这组自训练权重具备大型通用图片模型的能力。真正需要比较的是它到新任务以后表现如何。冻结和微调分别改变哪些参数冻结特征参数时设置requires_gradFalse优化器只接收新分类头的参数。网络前向计算仍然经过全部特征层只是这些参数不再根据目标损失求梯度、更新。fromexamples.conv_coreimportTinyCNN,freeze_features modelTinyCNN(2)print(sum(p.numel()forpinmodel.parameters()))freeze_features(model)print(sum(p.numel()forpinmodel.parameters()ifp.requires_grad))输出为4274和66。32×2 个权重加 2 个偏置共 66 个目标头参数。本章冻结方案训练后特征参数逐值未变分类头确实改变。这个事实由参数比较验证不靠运行时长猜测。微调则允许已有特征继续适应目标数据。本章前 10 轮冻结特征只训练二类头学习率 0.01后 10 轮解冻全部参数学习率降低为 0.003并重新建立优化器纳入解冻的参数。如果只改requires_grad却仍使用只包含分类头的旧优化器特征不会因这次修改自动进入更新列表。冻结参数与eval()也要分清。前者决定是否求参数梯度后者控制部分层的训练行为。本章网络没有 BatchNorm 和 Dropout换成含这些层的预训练模型时还要考虑统计量和随机失活。用同一份目标数据比较三个方案的目标网络结构相同目标划分、图片转换、批量 32、20 轮预算和随机种子 42 相同。二类头从完全相同的初始参数开始每个方案每轮 4 批末批 24 张共 80 次更新。各方案按相同随机批次顺序训练。目标测试仅在固定训练结束后用于评估没有用于挑轮次和学习率。方案前 10 轮后 10 轮训练正确测试正确测试准确率测试损失从头训练全部随机初始化学习率 0.01全部更新学习率 0.01116/120183/20091.5%约 0.225924冻结迁移源特征固定只更新新头继续只更新新头113/120182/20091.0%约 0.218500分段微调源特征固定只更新新头解冻全部学习率 0.003113/120185/20092.5%约 0.191309冻结方案比从头训练少答对一张微调多答对两张。结果说明在这次划分和固定预算下微调略好它没有证明迁移一定更好也没有证明这两个百分点在其他划分上稳定存在。这是单次实验若要做更强的效果结论需要多次划分、训练种子和合适的不确定性评估。目标训练阶段约为 0.106、0.078、0.096 秒分别对应三个方案。源预训练还用了约 1.78 秒、1000 张源图片和 480 次更新。时间覆盖优化器准备、训练及逐轮训练集评估不含库导入、图片读取、绘图和安装。这个小实验的毫秒差值会受设备状态影响不能写成普遍速度保证。读者使用已经提供的源权重时可以省去重新预训练但计算这组权重从何而来时源成本仍需要算上。比较表和完整指标见实验结果。三个模型分别保存重载后在 200 张目标测试图上的原始分数逐值一致。遇到报错时先查头和梯度保留十类头去做奇偶预测时程序可能不会立即因为交叉熵标签 0 和 1 报错因为十类输出仍能接收这些编号。但另外八个输出类别没有目标含义。本章错误示例主动断言输出必须为二类修复版替换成Linear(32, 2)输出(1, 2)。如果把新分类头也一起冻结损失就没有可求导的参数路径调用backward()会失败。修复版只冻结特征检查出特征梯度为空而分类头有梯度。两组完整报错、修复和真实结果见错误记录。本章的轻量路线完整包含源预训练、新任务、冻结和微调读者可以用普通 CPU 逐步查看。以后换成大型预训练模型时还要核对源权重许可、输入通道、像素处理和原类别定义。先完成【零基础学AI】第 24 章课后练习与答案下一章我们把输入换成文字看看词语怎样变成数字和向量。
延伸阅读

更多相关文章

2026/11/5 7:43:10

跨平台隐私守护:FreeTube三大系统版本深度评测

跨平台隐私守护:FreeTube三大系统版本深度评测 作为一款注重隐私保护的开源YouTube客户端,FreeTube(package.json)提供了Windows、macOS和Linux全平台支持。本文将从安装体验、功能适配和性能表现三个维度,对比分析不…

2026/11/5 7:43:10

Apollo 迁移指南:从 GameStream 到 UPnP 公网串流

Apollo 迁移指南:从 GameStream 到 UPnP 公网串流 【免费下载链接】Apollo Sunshine fork - The easiest way to stream with the native resolution of your client device 项目地址: https://gitcode.com/gh_mirrors/apollo18/Apollo NVIDIA 在 2023 年 2 …

2026/11/5 8:28:15

OpenMV与STM32F103C8T6串口通信实现物料搬运机器人视觉控制

简介:这份资源面向参加工程训练类比赛的学生与嵌入式初学者,提供一套基于OpenMV视觉模块与STM32F103C8T6微控制器的物料搬运机器人完整代码方案,用C语言实现图像识别、目标定位与运动控制的协同,解决机器人自主识别物料并完成抓取…

2026/11/5 8:28:15

GEE Assets 批量删除与复制实战指南

资产目录越堆越乱这件事,几乎每个用 Google Earth Engine 做过几个项目的人都躲不过。最初的几个月图省事,导入的影像随手丢在根目录,命名全靠手打,Collection 和 Image 混在一起,等到项目交接或者要清理额度的时候&am…

2026/11/5 8:28:15

BI工具冗余如何拖慢企业决策?破解数据孤岛难题

1. 问题现象:BI工具越多,决策反而越慢的怪圈最近三年接触了47家企业的数据分析团队,发现一个有趣的反常现象:约68%的企业在引入第二个BI工具后,季度经营分析会的决策周期平均延长了2.3个工作日。某零售企业甚至出现了&…

2026/11/5 8:28:15

数字孪生技术架构与实施全解析

1. 数字孪生技术全景解析:从概念到落地实践作为一名长期从事三维可视化与工业数字化的技术从业者,我见证了数字孪生技术从实验室概念到产业落地的完整发展历程。今天,我将系统性地梳理数字孪生领域300个核心术语与技术要点,这些知…

2026/11/5 8:28:15

GIS可视化中色彩科学与ArcGIS色带应用

1. 色彩科学在GIS可视化中的核心价值地理信息系统(GIS)的可视化效果直接影响数据解读效率,而色彩作为最直观的视觉变量,其科学运用尤为关键。在ArcGIS平台中,色带(Color Ramp)不仅是简单的颜色过…

2026/11/5 8:23:15

Go安全测试工具工程化:并发超时、字节解析与限速审计

1. 先把“黑帽子”这三个字摆到台面上:Go 在安全测试里真正吃香的三件事前阵子帮一个做内部资产盘点的团队看代码,他们用某个脚本语言写的探测工具,扫完一个 /16 的网段要跑将近四个小时,中间还因为网络抖动卡死在某个地址上&…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑