是什么
为什么
图像数据具有强局部相关性,全连接网络参数量爆炸且无法平移不变,CNN 用更少参数实现更高精度。
怎么做
用 PyTorch 或 TensorFlow 定义卷积层+池化层+全连接层,输入归一化图像张量即可训练。
什么时候
图像分类、目标检测、分割等视觉任务必选;纯文本或表格数据不用。
FOCUS
先记住这些
不掌握就无法正确设计网络
卷积核只扫描局部区域,过大则失去局部性,过小则无法捕获上下文
与全连接网络的本质差异
同一组权重在全图复用,参数量从 O(N²) 降至 O(K²),训练更稳定
最高频踩坑点
过度池化导致细节丢失,特征图过小后分类器无法恢复空间信息
决定模型上限的关键
浅层提取边缘/纹理,深层组合为部件/对象,层级断裂则精度骤降
PROBLEM / POSITION / INTERFACE
先弄清它为什么存在,以及谁在使用
-
01 解决的问题
需要让机器理解图像内容时
全连接网络参数过多、过拟合严重、无法捕捉局部模式
- 成功标准
- 模型在验证集上稳定收敛,泛化到新图像仍保持高准确率
-
02 AI 生态位
视觉感知模块的核心,上游接图像预处理,下游接分类器或检测头
- 上游
- 图像预处理(缩放、归一化、增强)
- 下游
- 分类器、目标检测器、分割网络或下游业务逻辑
-
03 人的生态位
负责数据标注、架构选择、超参调优与结果验收
- 适合使用
- 输入为图像或具有网格结构的数据,且需提取空间局部特征
- 不必使用
- 数据无空间结构(如表格)、或已有预训练视觉模型可直接微调
-
04 独特价值
参数共享+局部连接,天然适配图像平移不变性,训练效率远高于全连接
感受野设计不当导致信息丢失;过拟合与梯度消失需靠正则与归一化控制
- 复杂度判断
- 复杂度不是功能数量,而是控制与验证成本。
INTERFACE FLOW
谁在操作,信息怎样流动
-
WHO OPERATES
HUMAN选择架构、准备数据、调参、评估结果
SYSTEM执行前向传播、反向传播、权重更新
-
INPUT
归一化后的图像张量(如 3×224×224)
-
CONTROL
卷积核大小、步长、填充、激活函数、学习率、数据增强策略
-
OUTPUT
特征图或分类概率,供下游模块或人工判断
CODE / PYTHON最小 PyTorch 调用
import torch
import torch.nn as nn
import torch.optim as optim
class SimpleCNN(nn.Module):
def __init__(self):
super().__init__()
self.conv = nn.Conv2d(3, 16, kernel_size=3, padding=1)
self.pool = nn.MaxPool2d(2, 2)
self.fc = nn.Linear(16 * 56 * 56, 10)
def forward(self, x):
x = self.pool(torch.relu(self.conv(x)))
x = x.view(x.size(0), -1)
return self.fc(x)
model = SimpleCNN()
optimizer = optim.Adam(model.parameters(), lr=0.001)
# 假设 inputs 为 [batch, 3, 224, 224]
outputs = model(torch.randn(4, 3, 224, 224))
print(outputs.shape)最短闭环:定义卷积+池化+全连接 → 前向传播 → 打印输出形状。真实训练需加损失与数据加载。
JSON / RESPONSE典型输出张量形状(示意)
{
"batch_size": 4,
"output_shape": [
4,
10
],
"feature_map_after_conv": [
4,
16,
224,
224
],
"feature_map_after_pool": [
4,
16,
112,
112
]
}PRACTICE
训练前必查清单
✓图像已归一化到 [0,1] 或标准化到 ImageNet 均值方差
✓卷积核大小与步长匹配任务尺度(小目标用小核)
✓池化次数不超过 3 次,避免特征图过小
✓使用 BatchNorm 或 LayerNorm 稳定训练
✓验证集与训练集分布一致,无数据泄露
FAQ
常见问题
01CNN 和全连接网络在图像处理上有什么区别?+
CNN 用局部连接和权值共享,参数量少且保留空间结构;全连接破坏局部性且极易过拟合。
避免用错架构导致训练崩溃或精度低下。02最小可用 CNN 长什么样?+
1 个卷积层 + 1 个池化层 + 1 个全连接层,输入归一化图像即可跑通。
帮助快速验证数据管线与训练流程。03什么时候不需要自己搭 CNN?+
有现成预训练模型(如 ResNet、EfficientNet)时,直接微调即可,无需从零设计。
节省算力与调参时间,提升基线精度。04训练时 loss 不下降怎么排查?+
检查学习率是否过大、数据是否未归一化、卷积核是否过小导致感受野不足。
快速定位常见训练失败原因,避免盲目调参。NEXT