卷积神经网络
利用局部连接和权重共享处理图像等网格结构。
学习目标
- 追踪灰度分类器的完整形状链
- 更深层为什么经常用更多通道、更小空间?
- 说明:随机张量前向只验证结构契约;分类准确率必须由真实且独立的数据评估。
为什么需要这个概念
卷积神经网络是以卷积特征提取为核心的网络,通常结合非线性、归一化与下采样,再用任务头进行分类、检测或分割。
学习前需要掌握
背景与问题
图像分类既需要识别局部边缘,也需要把局部证据组合成整体语义。CNN 通过多层局部运算,让特征的感受范围逐步扩大,而不是一开始就给每个像素独立全连接权重。
概念定义
卷积神经网络是以卷积特征提取为核心的网络,通常结合非线性、归一化与下采样,再用任务头进行分类、检测或分割。
直观理解
第一层寻找小图案,后续层把多个小图案组合。空间网格逐渐变粗,通道则可以存放更多不同类型的特征。
核心原理
卷积负责局部混合与共享,激活提供非线性;只叠线性卷积仍然缺少必要的非线性表达。下采样可以由池化或带步长卷积完成,它降低计算量,也丢失位置细节。
深层单元的理论感受野随核和步长扩大,但实际对各位置的影响并不均匀。分类头可使用全局平均池化后接线性层,减少对固定输入分辨率的依赖;展平后全连接则把参数量绑定到特征图尺寸。
输入通道、数值范围和预处理必须与模型一致。灰度网络不能直接接三通道图像,预训练权重也通常要求配套归一化。CNN 的局部先验很有用,但长距离关系、旋转或域变化不会自动得到解决。
数学表达
核心公式
卷积神经网络是以卷积特征提取为核心的网络,通常结合非线性、归一化与下采样,再用任务头进行分类、检测或分割。
变量含义
C_in输入通道C_out输出通道K卷积核尺寸
计算步骤
- 1卷积得到 (8,16,28,28)。
- 2池化得到 (8,16,14,14),展平后每张有 3136 维。
- 3线性层把 3136 维映射为 10 个分数。
代码对应位置
示例 1追踪灰度分类器的完整形状链的最小验证:使用完整构造输入核对追踪灰度分类器的完整形状链,输出只表示本例计算。
变量解释
| 变量 | 含义 |
|---|---|
C_in | 输入通道 |
C_out | 输出通道 |
K | 卷积核尺寸 |
完整数值示例
追踪灰度分类器的完整形状链
已知条件
- 输入为 8 张 28×28 灰度图
- 卷积输出 16 通道,3×3 核、padding=1;随后 2×2 池化
- 最终输出 10 类 logits
计算步骤
- 卷积得到 (8,16,28,28)。
- 池化得到 (8,16,14,14),展平后每张有 3136 维。
- 线性层把 3136 维映射为 10 个分数。
计算结果
最终输出形状为 (8,10);卷积有 160 个参数,线性层有 31370 个参数。
处理前后对比
- 随机张量前向只验证结构契约;分类准确率必须由真实且独立的数据评估。
追踪灰度分类器的完整形状链
卷积参数为 16×(1×3×3+1)=160,而线性层为 10×(3136+1)=31370。这个小网络中,分类头反而占了大部分参数,不能只看到卷积层就认定参数一定少。
如果把输入改成 32×32,池化后为 16×16,原线性层就不再匹配。可以固定输入尺寸,也可以明确改为自适应池化;不能靠随意 reshape 抹平尺寸错误。
计算与实现步骤
- 卷积得到 (8,16,28,28)。
- 池化得到 (8,16,14,14),展平后每张有 3136 维。
- 线性层把 3136 维映射为 10 个分数。
代码实现
示例 1
追踪灰度分类器的完整形状链的最小验证
example_01.py用途:使用完整构造输入核对追踪灰度分类器的完整形状链,输出只表示本例计算。
import torch
from torch import nn
model = nn.Sequential(nn.Conv2d(1, 16, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2), nn.Flatten(), nn.Linear(16 * 14 * 14, 10))
out = model(torch.zeros(8, 1, 28, 28))
print(tuple(out.shape))
print("conv params:", sum(p.numel() for p in model[0].parameters()))
print("head params:", sum(p.numel() for p in model[-1].parameters()))代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
使用完整构造输入核对追踪灰度分类器的完整形状链,输出只表示本例计算。
model- 组合预处理和估计器的模型对象。
Step 1 · 1–7 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
import torch
from torch import nn
model = nn.Sequential(nn.Conv2d(1, 16, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2), nn.Flatten(), nn.Linear(16 * 14 * 14, 10))
out = model(torch.zeros(8, 1, 28, 28))
print(tuple(out.shape))
print("conv params:", sum(p.numel() for p in model[0].parameters()))
print("head params:", sum(p.numel() for p in model[-1].parameters()))预期输出或运行结果
(8, 10) conv params: 160 head params: 31370
常见错误 · 5 条
- NCHW 顺序错
- 通道不匹配
- Linear 输入算错
- CE 前 Softmax
- 确认样本轴、特征轴以及 X 与 y 的第一维完全对应。
实际应用
- 图像分类特征提取
- 检测与分割的视觉骨干网络
常见错误
- NCHW 顺序错
- 通道不匹配
- Linear 输入算错
- CE 前 Softmax
常见问题
更深层为什么经常用更多通道、更小空间?
下采样控制空间计算成本,更多通道提供更多特征类型;这是常见设计权衡,不是每种任务都必须遵循的定律。
这个示例能说明什么边界?
随机张量前向只验证结构契约;分类准确率必须由真实且独立的数据评估。
推荐学习资料
Dive into Deep Learning
把数学、图示、文字与可执行代码结合,系统覆盖深度学习基础和现代模型。
Zhang / Lipton / Li / Smola · D2L.ai
资料笔记
pytorch/examples
提供视觉、文本、强化学习和分布式训练等 PyTorch 参考示例。
PyTorch · GitHub
仓库信息
运行和研究常见 PyTorch 模型示例
主要语言:Python包含数据集或实验需要额外环境资料笔记
Feature Visualization
通过优化输入和可视化神经元响应解释深度网络内部学到的特征。
Olah / Mordvintsev / Schubert · Distill