AI入门教程03.02:LeNet卷积神经网络
本文介绍如何写一个LeNet卷积神经网络。网络结构为
使用MNIST数据集,内容为手写数字,1通道灰度图。
模型流程为
- 将1通道32x32图片卷积为6通道28x28图片
- 使用池化缩小图片
- 将6通道14x14图片卷积为16通道10x10图片
- 使用池化缩小图片
- 将16通道5x5图片缩小为1通道宽1高120图片
- 将120图片限制为1通道宽1高84图片
- 将84图片输出对应0-9这10个结果
模型开发
将神经网络模型转换为对应代码的基本流程。
硬件选择
根据硬件情况选择加速方式
1 |
|
加载数据集并进行预处理
缩放、裁剪、归一化数据集中的数据。
MNIST数据集图片大小相同,这一步跳过。
1 |
|
如果指定位置没有数据集就自动下载。
定义模型
根据神经网络模型定义编写代码
1 |
|
全连接使用Linear函数,只要是784->256->10
使用view函数将二维图片转换为一维数组。
全连接后使用激活函数获得数据。
conv2d 输出通道一般为32 64 128 256
池化
池化,也称为下采样(Subsampling),是一种降低数据维度的技术。在深度学习中,池化操作通常应用于卷积神经网络的卷积层之后,用于减小特征图的尺寸,从而降低模型的复杂度,减少计算量,并防止过拟合。池化操作的基本思想是将特征图划分为若干个子区域(一般为矩形),并对每个子区域进行统计汇总。
常用的有:
- 最大池化(Max Pooling):在每个子区域内选择最大值作为该区域的输出。能够保留图像中的纹理特征,对边缘和角点等特征信息较为敏感。常用于图像分类、物体检测等任务中。
- 平均池化(Average Pooling):计算每个子区域内所有值的平均值作为该区域的输出。能够保留图像的背景信息,对图像的整体特征进行平滑处理。在某些情况下,平均池化能够提供更好的性能,尤其是在需要保留图像整体信息时。
- 全局池化(Global Pooling):包括全局最大池化(Global Max Pooling)和全局平均池化(Global Average Pooling)。全局最大池化将特征图中的每个通道的所有值取最大值,得到一个与通道数相同的向量;全局平均池化则将特征图中所有元素取平均值,得到一个单一的数值。全局池化能够进一步降低特征图的维度,同时保留关键信息。在图像分类任务中,全局池化层通常位于卷积层之后,用于将特征图转换为固定长度的特征向量,以便进行后续的分类操作。
作用与优势:
- 降维:减小特征图的尺寸,降低计算复杂度和内存消耗,加快模型训练速度。
- 保留重要信息:尽管池化会减小数据尺寸,但它会尽量保留重要的特征信息。
- 平移不变性:池化操作能提供一定程度的平移不变性,即图像在小范围内的平移变化不会影响到池化后的结果。
- 防止过拟合:通过减小特征图的尺寸和降低模型的复杂度,池化操作有助于防止模型在训练集上的过拟合现象。
一般先激活,然后池化。
初始化模型、损失函数和优化器
1 |
|
训练
1 |
|
预测
1 |
|
运行
运行输出为
1 |
|
源码
完整代码为
1 |
|
AI入门教程03.02:LeNet卷积神经网络
https://blog.jackeylea.com/ai/how-to-build-a-lenet-nn/