深度学习——LeNet卷积神经网络初探
模型介绍:

简单介绍: 从网络结构可以看出LeNet对于现在的大模型来说是一个非常小的神经网络,他一共由7个层顺序连接组成。分别是卷积层、pooling层、卷积层、pooling层和三个全连接层。用现代的深度学习框架来实现代码如下:
代码实现和解读:
1 | net = nn.Sequential( |
解读: 这一部分是有关网络的定义,可以看出网络的基本层实现都调用了torch的库,sigmoid() 函数的作用是:让网络中各层叠加后不会坍缩,因为引入了非线性函数。我们来输出一下网络的各层的结构。
1 | X = torch.rand(size=(1, 1, 28, 28), dtype=torch.float32) |
1 | Conv2d output shape: : torch.Size([1, 6, 28, 28]) |
接下来我们利用沐神的d2l包中的数据集准备函数来下载MNIST数据集。
1 | def evaluate_accuracy_gpu(net, data_iter, device=None): |
以上的这段代码的关键步骤是执行了.to(device)操作,上述方法作用的调用可用的GPU进行加速运算。
接下来这段代码是对net执行训练的方法定义:
1 | def train_ch6(net, train_iter, test_iter, num_epochs, lr, device): |
这段代码非常的长,我们将其分为几个部分来进行解读:
首先:
1 | def init_weights(m): |
这一段摘要做的是网络所有参数的初始化。
其次:
1 | print('training on', device) |
这一段主要是定义了网络训练和结果可视化的必要变量,并将网络放在GPU上进行运行。
接下来:
1 | for epoch in range(num_epochs): |
这一部分是最重要的训练部分:前向传导、计算损失、对损失进行反向传导并计算梯度、根据梯度来更新参数。对每一个样本都进行上述的基本过程。
剩下的部分就是对训练的中间过程进行适当的输出。
1 | lr, num_epochs = 0.9, 10 |
这段代码描述的是网络训练器使用的过程。根据上述参数定义,得到的训练结果如下图:

模型局部最优化:
接下来,我想做的是,利用循环和结果可视化来找到这个模型下的局部最优超参数。
–つづけ
- Title: 深度学习——LeNet卷积神经网络初探
- Author: tasukyou
- Created at : 2024-11-13 17:06:04
- Updated at : 2024-12-09 19:34:31
- Link: https://github.com/tatsu-kyou/2024/11/13/深度学习——LeNet卷积神经网络初探/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments