卷积神经网络(CNN)
一、什么是卷积神经网络(CNN)
卷积神经网络(Convolutional Neural Network,CNN)是一种专门处理网格结构数据(图像 = 二维网格、语音 = 一维网格、视频 = 三维网格)的深度学习模型。
它最大的特点:不用人工提取特征,模型自己从数据中学到边缘、纹理、形状、物体特征。
传统机器学习需要人工设计特征(如 HOG、SIFT),而 CNN 是端到端自动学习。
二、CNN 三大核心思想(必须懂)
这是 CNN 能工作、能高效处理图像的根本原因:
- 局部感受野(Local Receptive Field)
人眼看东西,一次只看一小块区域。CNN 也是:只对局部像素做计算,不看全图,保留空间位置关系。 - 权值共享(Weight Sharing)
同一个卷积核(过滤器)在整张图片上滑动。→ 参数数量爆炸式减少一张 224×224 的图,传统网络参数几百万;CNN 可能只要几千。 - 池化(下采样)
压缩特征图尺寸,保留关键信息,降低计算量,防止过拟合。
三、CNN 完整结构(逐层级深度讲解)
CNN 标准流程:输入层 → 卷积层 → 激活层 → 池化层 → 卷积 / 池化堆叠 → 全连接层 → 输出层
-
输入层(Input Layer)
输入一般是图像张量:(高度 H, 宽度 W, 通道数 C)
灰度图:(H, W, 1)
RGB 彩色图:(H, W, 3)
必须做的预处理:
缩放到统一尺寸(224×224、32×32)
归一化(像素值 0~1 或 -1~1)
数据增强(翻转、裁剪、旋转) -
卷积层(Convolutional Layer)【核心!灵魂!】
(1)卷积是什么?
卷积 = 一个小矩阵(卷积核)在图像上滑动,做乘加运算,提取特征。
(2)卷积核(Kernel / Filter)
常用大小:1×1、3×3、5×5
作用:提取边缘、角点、纹理、颜色、形状
模型训练时,卷积核的值自动学习,不需要人工设置
(3)卷积运算公式
Output(i,j)=∑m=0h∑n=0wInput(i+m,j+n)∗Kernel(m,n)大白话:对应位置相乘 → 全部相加 → 得到一个值
(4)步长(Stride)
卷积核每次滑动几格
stride=1 → 每次移动 1 像素
stride=2 → 尺寸缩小一半
(5)填充(Padding)
给图像外围补 0
valid:不填充,图像会变小
same:填充,让输出和输入尺寸一样
(6)特征图(Feature Map)
卷积后的输出叫特征图它存储的不是像素,而是抽象特征。
-
激活函数(引入非线性)
没有激活函数,CNN 就是线性模型,无法识别复杂图案。
最常用:ReLU
ReLU(x)=max(0,x)优点:
解决梯度消失
计算极快
深度网络必备
其他激活函数
Sigmoid:二分类、输出概率
Tanh:归一化 - 1~1
LeakyReLU:防止神经元死亡 -
池化层(Pooling Layer)【降维层】
作用:缩小尺寸、减少计算、保留关键特征、防止过拟合
两种最常用池化
最大池化(Max Pooling)取区域内最大值 → 保留最突出特征(图像任务首选)
平均池化(Avg Pooling)取区域内平均值 → 保留整体信息
例子:2×2 池化、stride=2 → 尺寸直接缩小为原来的 1/4 -
全连接层(Fully Connected Layer)
把卷积提取的二维特征展平成一维向量,送到分类器。
例如:(7,7,512) → 展平 → 1×25088
然后接入全连接层做分类。 -
输出层
分类任务:Softmax → 输出各类别的概率和为 1
二分类:Sigmoid
回归任务:Linear(无激活)
四、CNN 输出尺寸计算公式(必考必用)
Output=StrideInput−Kernel+2×Padding+1例子:输入 32×32,kernel=3,padding=1,stride=1输出 = (32-3+2)/1 +1 = 32
五、CNN 训练过程(完整流程)
-
前向传播
输入图像 → 卷积 → 激活 → 池化 → 全连接 → 输出预测值 -
计算损失
分类任务用:交叉熵损失 Cross Entropy Loss回归任务用:均方误差 MSE -
反向传播
根据损失,用链式法则更新卷积核、全连接层权重。 -
优化器更新参数
常用:
SGD
Adam(最常用)
RMSprop -
正则化(防止过拟合)
Dropout
Batch Normalization
L2 正则
数据增强
六、经典 CNN 模型(发展史 + 特点)
- LeNet-5(1998)
第一个成功的 CNN用于:手写数字识别(MNIST) - AlexNet(2012)
深度学习里程碑首次在 ImageNet 夺冠,引爆 AI 浪潮使用:ReLU、Dropout、GPU 训练 - VGGNet(2014)
全部使用3×3 卷积结构简单、非常稳定工业界最常用基础网络 - ResNet(2015)
残差连接解决深度网络梯度消失问题可以训练 100 层、1000 层超深网络 - MobileNet / EfficientNet
轻量化模型,用于手机端、嵌入式设备
七、CNN 变体(扩展用途)
- 1D CNN
处理:文本、语音、时序数据提取局部时序特征 - 2D CNN
处理:图像(最常用) - 3D CNN
处理:视频、CT 医学影像 - 空洞卷积(Dilated Conv)
增大感受野,不丢失分辨率用于分割模型 - 深度可分离卷积(Depthwise Separable Conv)
轻量化必备,参数减少 8~9 倍
八、CNN 实际应用(全覆盖)
- 图像分类
猫狗分类、花卉分类、交通标志识别 - 目标检测
定位物体位置 + 分类代表模型:YOLO、Faster R-CNN、SSD应用:自动驾驶、人脸识别、安防 - 语义分割
给每个像素分类应用:医疗影像分割、自动驾驶路面分割模型:U-Net、Mask R-CNN - 人脸识别
1:1 比对、1:N 检索手机解锁、支付 - 医疗影像
CT、X 光、核磁病灶检测癌细胞识别、眼底疾病诊断 - 自然语言处理
文本分类、情感分析、意图识别用 1D CNN 做,速度非常快 - 图像生成与重建
GAN、超分辨率、去噪、上色
九、PyTorch 完整 CNN 代码(可直接运行)
import torch
import torch.nn as nn
import torch.optim as optim
定义CNN模型
class CNN(nn.Module):
def __init__(self, num_classes=10):
super(CNN, self).__init__()
# 卷积组 1
self.conv1 = nn.Sequential(
nn.Conv2d(3, 16, kernel_size=3, padding=1),
nn.BatchNorm2d(16),
nn.ReLU(),
nn.MaxPool2d(2)
)
# 卷积组 2
self.conv2 = nn.Sequential(
nn.Conv2d(16, 32, kernel_size=3, padding=1),
nn.BatchNorm2d(32),
nn.ReLU(),
nn.MaxPool2d(2)
)
# 全连接层
self.fc = nn.Linear(32 * 8 * 8, num_classes)
def forward(self, x):
x = self.conv1(x)
x = self.conv2(x)
x = torch.flatten(x, 1)
x = self.fc(x)
return x
初始化模型
model = CNN()
print(model)
训练配置
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
十、CNN 的优势与局限
优势
✅ 自动提取特征,无需人工设计✅ 参数少、计算快✅ 空间特征提取极强✅ 平移、缩放、旋转鲁棒性好✅ 适合图像、语音、时序、文本等网格数据
局限
❌ 需要大量标注数据❌ 对对抗样本脆弱❌ 全局建模能力不如 Transformer❌ 超深网络训练困难
十一、总结(最核心的几句话)
CNN = 卷积提取特征 + 池化降维 + 全连接分类
卷积层是特征提取器,从边缘→纹理→形状→物体逐层抽象
权值共享 + 局部感受野让 CNN 高效处理图像
应用覆盖图像分类、检测、分割、医疗、自动驾驶、NLP
是计算机视觉的基石,也是深度学习最必须掌握的模型
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)