卷积神经网络
卷积神经网络(Convolutional Neural Network, CNN)主要用于处理具有局部结构的数据,例如图像、二维网格和部分序列信号。它通过卷积核在空间上滑动,提取局部特征。
概念详解
二维卷积可写成:
其中
CNN 的重要性质:
- 局部连接:卷积核只关注局部区域。
- 参数共享:同一个卷积核在整个图像上复用。
- 平移等变:输入平移时,特征图也相应平移。
输出尺寸推导
设输入尺寸为
宽度同理:
例如
因此
应用代码
python
import torch
from torch import nn
class SmallCNN(nn.Module):
def __init__(self, num_classes=10):
super().__init__()
self.features = nn.Sequential(
nn.Conv2d(1, 16, kernel_size=3, padding=1),
nn.ReLU(),
nn.MaxPool2d(2),
nn.Conv2d(16, 32, kernel_size=3, padding=1),
nn.ReLU(),
nn.MaxPool2d(2),
)
self.classifier = nn.Linear(32 * 7 * 7, num_classes)
def forward(self, x):
x = self.features(x)
x = x.flatten(1)
return self.classifier(x)
model = SmallCNN()
x = torch.randn(8, 1, 28, 28)
logits = model(x)
print(logits.shape)小结
CNN 通过局部感受野和参数共享显著减少参数量。它适合图像任务,也是 U-Net、ResNet 和很多视觉生成模型的基础模块。