1️⃣ 什么是卷积神经网络(CNN)
卷积神经网络(Convolutional Neural Network, CNN) 是一种专为处理具有网格结构数据(如图像)而设计的神经网络。
最早用于手写数字识别(LeNet-5)
在图像分类、目标检测、语音识别等领域广泛应用
核心思想:
用卷积核(滤波器)提取局部特征
共享权重减少参数量
层叠结构逐步提取从低级到高级的特征
2️⃣ CNN 的核心结构
典型 CNN 结构:
输入层 → 卷积层 → 激活函数 → 池化层 → 卷积层 → 池化层 → 全连接层 → 输出层
3️⃣ 数学公式
卷积运算公式(单通道)
:输入特征图
:卷积核
:输出特征图
多通道卷积公式
激活函数(ReLU)
4️⃣ 卷积层(Convolution Layer)
作用:提取局部特征,保留空间关系。
参数:
卷积核大小(如 3×3、5×5)
步长(stride)
填充(padding)
5️⃣ 池化层(Pooling Layer)
作用:降低特征图分辨率,减少计算量,防止过拟合。
常见类型:
最大池化(Max Pooling):取局部窗口最大值
平均池化(Average Pooling):取局部窗口平均值
公式(最大池化):
6️⃣ 全连接层(Fully Connected Layer)
作用:将卷积提取的特征映射到最终输出空间(分类或回归)。
公式同 MLP:
7️⃣ 前向传播过程
输入图像(如 32×32×3)
卷积层提取低级特征(边缘、纹理)
激活函数增加非线性
池化层降采样
多层卷积+池化逐渐提取高级特征
全连接层将特征映射到标签空间
Softmax 输出分类概率
8️⃣ Python 实现(PyTorch)
import torch
import torch.nn as nn
import torch.optim as optim
class SimpleCNN(nn.Module):
def __init__(self, num_classes=10):
super(SimpleCNN, self).__init__()
self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1)
self.relu = nn.ReLU()
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
self.conv2 = nn.Conv2d(16, 32, kernel_size=3, stride=1, padding=1)
self.fc1 = nn.Linear(32 * 8 * 8, num_classes)
def forward(self, x):
x = self.pool(self.relu(self.conv1(x)))
x = self.pool(self.relu(self.conv2(x)))
x = x.view(x.size(0), -1)
x = self.fc1(x)
return x
# 模型测试
model = SimpleCNN(num_classes=10)
X = torch.randn(4, 3, 32, 32)
outputs = model(X)
print("Output shape:", outputs.shape)
9️⃣ 优缺点总结
✅ 优点:
参数共享,减少计算量
局部感受野,捕捉空间特征
适合高维数据(图像、视频、语音)
❌ 缺点:
对旋转、缩放不一定鲁棒
训练需要大量数据和计算资源
🔟 应用场景
图像分类(ImageNet、CIFAR)
目标检测(YOLO、Faster R-CNN)
图像分割(U-Net、Mask R-CNN)
视频分析、动作识别
语音识别
📌 总结
CNN 通过卷积层和池化层高效地提取特征,已成为计算机视觉任务的主力模型。结合深度网络结构(如 ResNet、DenseNet)和注意力机制(SE、CBAM),CNN 在多领域仍保持很强竞争力。