采用任意一种课程中介绍过的或者其它卷积神经网络模型(例如LeNet-5、AlexNet等)用于解决某种媒体类型的模式识别问题。
Windows11; Anaconda+python3.11; VS Code
卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,特别设计用于处理和分析具有网格结构的数据,如图像和视频。它能够自动学习图像中的特征并进行高效的图像分类、对象检测、图像生成和分割等任务,其模型结构主要包含以下部分:
AlexNet网络结构相对简单,使用了8层卷积神经网络,前5层是卷积层,剩下的3层是全连接层,具体如下图2所示。
与原始的LeNet相比,AlexNet网络结构更深,同时还包括以下特点:
MNIST数据集(Mixed National Institute of Standards and Technology database)是美国国家标准与技术研究院收集整理的大型手写数字数据集,包含60,000个样本的训练集以及10,000个样本的测试集。其中包括0到9的数字。
在本实验中,使用torchvision自带的数据集加载MNIST和CIFAR-10数据集,并使用transforms.ToTensor方法加载为Tensor张量,最后通过DataLoader加载进GPU进行运算。
4.2.2 模型设计
在本次实验中,仿照AlexNet,实现了包含五个卷积层和三个全连接层构建一个深度卷积神经网络,网络的定义是重写nn.Module实现的,卷积层和全连接层之间将数据通过view拉平,同时可选择加入Dropout层防止数据过拟合。
Feature map数变化:1→32→64→128→256,卷积核kernel size均为3,同时在边缘填充单位长度的0,步幅均为1。
MaxPooling核大小为2×2,每次将特征图大小缩为原来的一半。
在本次实验中,使用交叉熵损失函数和SGD优化器,激活函数采用ReLU,将模型输入通道根据数据集设为1,并设置训练超参数epoch为10,batch size为128,学习率learning rate为0.01。训练过程中损失函数loss的值和在测试集上的准确率变化如下图所示。
实验发现,随训练过程的进行,损失函数不断降低,在测试集上准确率逐渐升高,最终测试正确率最高能够达到约98.94%。损失函数和测试准确率在训练最后阶段呈现波动态,可能原因是在局部最优点附近振荡。
而后通过torch.load方法加载模型对测试集进行直观展示,模型能够对手写数字作出较为准确的分类,具有一定的泛化能力。
将所有激活函数换为Sigmoid函数,发现结果很差,损失函数强烈震荡,几乎毫无效果。分析原因可能为:
而将所有激活函数换为LeakyReLU函数,发现结果有一定提升,最高能够达到99.13%左右,且收敛速度较快,原因可能为:
传统的 ReLU 在负数输入时输出为零,这可能导致梯度在训练过程中变得非常小或者为零,称为梯度消失。Leaky ReLU 引入了一个小的负数斜率,使得梯度在负数输入时仍然存在,从而导致更均匀的梯度分布,可以减少训练过程中的梯度爆炸问题,并使权重更新更加平滑。
卷积神经网络使用卷积操作,相较于全连接,其网络层与层之间的连接是稀疏的。其次同一层的卷积的参数是共享的,且每一层的卷积运算可以并行处理,具有较快的学习和推理速度,同时也具有较强的表示和学习能力,在图像分类领域具有较为广泛的应用。
同时,需要针对数据集和具体任务选择合理的超参数,采用合适的权重初始化方法,能够有效提高模型的性能。同时,适时的引入Dropout操作,可以通过随机断开神经元的连接,使模型更具鲁棒性,降低模型过拟合风险。
此外,CNN 还可用作其他任务的基础模型,如生成对抗网络(GAN),作为其backbone模型来辅助生成高质量的图像。