1. LeNet网络架构解析
LeNet-5作为首个成功应用的卷积神经网络,其架构设计体现了早期CNN的核心思想。整个网络由7层组成(不含输入层),包含两个卷积块和三个全连接层。
1.1 输入层设计
- 输入尺寸:32×32像素(原始论文设计)
- 实际适配:28×28(如MNIST数据集)
- 通道数:1(灰度图像)
注意:虽然原始论文使用32×32输入,但在实际应用中常调整为28×28以适应MNIST数据。这种尺寸差异源于历史原因,现代实现通常会保持输入层与数据尺寸一致。
1.2 卷积块结构
第一卷积块:
- 卷积层C1:6个5×5卷积核,步长1,padding=2
- 激活函数:Sigmoid
- 池化层S2:2×2平均池化,步长2
第二卷积块:
- 卷积层C3:16个5×5卷积核,步长1
- 激活函数:Sigmoid
- 池化层S4:2×2平均池化,步长2
1.3 全连接部分
- 特征展平:将16个5×5的特征图展平为400维向量
- 全连接层FC5:120个神经元
- 全连接层FC6:84个神经元
- 输出层FC7:10个神经元(对应0-9数字分类)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心组件实现细节
2.1 卷积层实现
python复制# PyTorch实现示例
self.conv1 = nn.Conv2d(1, 6, kernel_size=5, padding=2)
self.conv2 = nn.Conv2d(6, 16, kernel_size=5)
参数计算:
- 输出尺寸公式:$W_{out} = \lfloor(W_{in} + 2P - K)/S\rfloor + 1$
- C1层:(28+2*2-5)/1 + 1 = 28(保持尺寸不变)
- C3层:(14-5)/1 + 1 = 10
2.2 池化层选择
原始使用平均池化的原因:
- 缓解梯度消失问题(相比最大池化)
- 符合图像处理传统(高斯滤波思想)
- 计算复杂度较低(90年代硬件限制)
现代改进建议:
python复制# 可替换为最大池化
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
2.3 全连接层设计
特征维度变化:
- C
