LeNet
是第一个成功应用的卷积神经网络,用于手写数字识别(MNIST 数据集)。


nn.Conv2d(1, 6, 5, padding=2):1通道→6通道,5×5核,保持28×28
nn.Sigmoid():激活函数(LeNet时代用,现在多用ReLU)
nn.AvgPool2d(2, 2): 2×2平均池化,尺寸减半
nn.Flatten():把 N, C, H, W 展平为 N, C×H×W
nn.Linear(16*5*5, 120):全连接,400→120
++++检查各层输出尺寸变化:++++


精度评估函数(在GPU上完成):

如果是 nn.Module,设置为评估模式eval()

获取模型所在的设备
net.parameters() :返回所有参数的迭代器
iter(net.parameters()):转成迭代器
next(...):取第一个参数.param.device
++++看它在 CPU 还是 GPU++++

累加器:记录 正确预测数, 总预测数

不计算梯度no_grad遍历数据集,把数据搬到device

计算精度

net(X):前向传播,输出 batch, 10 的分数
d2l.accuracy(..., y):计算这批有多少预测正确

y.numel():这批有多少样本
返回准确率

训练函数的实现:

Xavier 初始化

确保模型在GPU上运行

优化器和损失:

随机梯度下降和交叉熵损失
开始训练,外层遍历epoch,设置训练模式,初始化metric(损失总和, 正确数, 样本数)

内层循环遍历batch

指标计算

*optimizer = torch.optim.SGD(net.parameters(), lr=lr)
optimizer.step()的内部实现过程:

++++PyTorch 训练的标配框架:++++Xavier初始化 → SGD优化器 → 6步训练循环(清梯度→搬数据→前向→算损失→反向→更新)→ 实时画图监控。
AlexNet
结构特点:
更深更大:8层(LeNet 5层),60M 参数(LeNet 60K)
ReLU 激活:替代 Sigmoid,++++解决梯度消失++++,训练更快
Dropout:随机丢弃神经元,防止过拟合
MaxPooling:替代平均池化,保留最强特征


++++AlexNet与LeNet的结构对比:++++

AlexNet和LeNet的设计理念非常相似,但也存在显著差异。
(1)AlexNet比相对较小的LeNet5++++要深得多。++++AlexNet由八层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。
(2)AlexNet使用++++ReLU++++而不是sigmoid作为其激活函数。
(3)隐藏全连接层后加入了丢弃层
(4)数据增强
++++AlexNet = 大核开局(11×11) → 小核精细(3×3) + ReLU加速 + Dropout防过拟合 + 数据增强扩样本(人为扩充数据集,让模型更鲁棒)++++ ++++。++++
具体的实现:
框架

每个层输出的情况:

调用上面创建的train_ch6训练函数
