​​​​​​​【人工智能】手写数字识别

手写数字识

  • 实验背景
    1. 数据集介绍

MNIST数据集包含了一系列的手写数字图像,包括0到9的数字。每张图像都是灰度图像,尺寸为28x28像素。数据集共包含60000张训练图像和10000张测试图像。

MNIST数据集的目标是通过训练一个模型,使其能够正确地识别这些手写数字图像的标签。每张图像都有对应的标签,表示图像中显示的数字。因此,MNIST数据集是一个经典的监督学习问题,其中输入是图像,输出是对应的数字标签。

图 1 MNIST 数据集图像示例

    1. 实验环境 

本次实验,在跑完老师提供的 PaddlePaddle 代码的基础上,采用PaddlePaddle环境进一步训练模型,利用PaddlePaddle的可视化插件VisualDL进行训练模型过程的可视化。

另附代码见附录和.ipynb 文件。

    1. 实验设置

本次实验,我主要比较了几种不同的经典神经网络在 MNIST数据集上的表现,包括经典模型如MLP,LeNet , AlexNetVGGNet和ResNet。其中MLP,LeNet使用1*28*28图像,因为AlexNet经过卷积等操作之后的图像特征输出比较小,如果图像大小为28*28训练会发生报错return 0,因此AlexNetVGGNet和ResNet三个模型使用1*224*224图像

      1. MLP

其中,MLP的网络设置如下:

图 2  多层感知机网络结构

定义了三个全连接(线性)层 (fc1、fc2 和 fc3)。

输入张量 x 沿第二个轴展平。将展平后的输入通过第一个线性层 (fc1)。应用 ReLU 激活函数。将结果通过第二个线性层 (fc2)。再次应用 ReLU 激活函数。将结果通过第三个线性层 (fc3)最后,在轴 1 上应用 softmax 激活函数,获得输出概率。

这个 MLP 架构包括个带有 ReLU 激活的线性层,最后使用 softmax 激活进行多类别分类

      1. LeNet

LeNet 是由 Yann Lecun 和他的同事于 1998 年提出的卷积神经网络(Convolutional Neural Network,CNN)架构。它是深度学习领域中的开创性网络之一,被广泛应用于手写字符识别等任务。以下是 LeNet 的一般介绍:

图 3 LeNet 结构

LeNet 结构:

LeNet 主要包含两个部分:卷积层和全连接层。

1.卷积层部分:

  1. 第一个卷积层 (self.conv1):输入通道数为1(因为手写数字识别数据集是单通道图像),输出通道数为6,卷积核大小为5x5,步长为1。接着应用ReLU激活函数。
  2. 第一个池化层 (self.pool1):使用最大池化操作,池化核大小为2x2,步长为2。
  3. 第二个卷积层 (self.conv2):输入通道数为6,输出通道数为16,卷积核大小为5x5,步长为1。接着应用ReLU激活函数。
  4. 第二个池化层 (self.pool2):使用最大池化操作,池化核大小为2x2,步长为2。

2.全连接层部分:

  1. 全连接层1 (self.fc1):输入特征数为256(经过两次池化后的图像大小),输出特征数为256。接着应用ReLU激活函数。
  2. 全连接层2 (self.fc2):输入特征数为256,输出特征数为84。接着应用ReLU激活函数。
  3. 全连接层3 (self.fc3):输入特征数为84,输出特征数为10(对应10个分类类别)。

关键点和创新:

1. 卷积和下采样: LeNet 首次引入了卷积操作和下采样(池化)操作,通过这些操作有效地减小了网络的参数数量。

2. 非线性激活函数:使用ReLU激活函数引入了非线性映射,增强了网络的表示能力。

3. 层次结构:LeNet 显示了通过层次结构构建深度网络的可行性,为后续深度学习模型奠定了基础。

尽管 LeNet 本身在今天的大规模图像分类任务中可能显得较为简单,但它为卷积神经网络的发展奠定了基础,为后来更深层次的网络(如 AlexNet、VGG、ResNet 等)的设计提供了灵感。

      1. AlexNet

AlexNet是一种深度卷积神经网络(CNN),由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton在2012年提出。它在ImageNet Large Scale Visual Recognition Challenge(ImageNet ILSVRC)比赛中取得了显著的突破,成为深度学习在计算机视觉领域的重要里程碑。

其网络结构如下:

图 4 AlexNet 网络结构

同时,在本实验中输入图像尺寸为 1*224*224 。

以下是AlexNet的主要特点和架构:

  1. 深度:AlexNet是一个相对较深的神经网络,它有8个可训练的卷积层和3个全连接层。在当时,它是迄今为止最深的神经网络之一。
  2. 卷积层:AlexNet的前5个层是卷积层,其中,前两个卷积层具有较大的卷积核尺寸(11x11和5x5),并且采用了步长为4和2的较大步幅。这些卷积层能够提取出更高级的特征。
  3. 激活函数:AlexNet使用了修正线性单元(ReLU)作为激活函数,这在当时是一种比较新颖的选择。ReLU函数能够有效地缓解梯度消失问题,并加速训练过程。
  4. 池化层:在卷积层之后,AlexNet使用了最大池化层来降低特征图的空间维度,减少模型的参数量,并提高模型的鲁棒性。
  5. 局部响应归一化(LRN):在卷积层和池化层之间,AlexNet引入了LRN层,用于增强模型的泛化能力。LRN层对局部神经元的活动做归一化,通过抑制相邻神经元的响应来增强更稀疏的特征。
  6. 全连接层:在卷积层之后,AlexNet有3个全连接层,其中最后一个全连接层是用于分类的输出层。全连接层具有大量的参数,能够捕捉高层次的语义特征。
  7. Dropout:为了减少过拟合,AlexNet在全连接层中引入了Dropout技术。Dropout通过随机丢弃部分神经元的输出来防止过拟合,从而提高模型的泛化能力。
  8. 分类任务:AlexNet最初是设计用于ImageNet ILSVRC比赛的分类任务,其中包含1000个不同类别的图像。它的最后一个全连接层输出1000维的向量,表示不同类别的概率分布。

总体而言,AlexNet通过引入深度、大型卷积核、ReLU激活函数、池化层、LRN层和Dropout技术等关键组件,极大地推动了深度学习在计算机视觉领域的发展,并在ImageNet ILSVRC比赛中取得了显著的突破。它的成功为后续的深度神经网络模型奠定了基础,对现代深度学习的发展产生了重要影响。

      1. VGGNet

VGGNet是一种深度卷积神经网络,由牛津大学的研究团队于2014年提出。它在ImageNet图像分类挑战赛中取得了出色的成绩,并成为卷积神经网络设计中的重要里程碑之一。VGGNet的主要贡献在于通过增加网络的深度来提高模型性能,并将深度和宽度作为关键设计元素。

其网络结构如下:

图 5 VGGNet 网络结构

以下是VGGNet的主要特点和设计原理:

1. 网络结构:VGGNet的整体结构非常简单和规整,它由多个卷积层和池化层交替堆叠而成,最后是几个全连接层。VGGNet的核心是使用了非常小的3x3卷积核,以较小的步幅进行卷积操作。通过堆叠多个卷积层,VGGNet可以达到比较大的感受野,从而能够捕捉到更全局的图像特征。

2. 深度和宽度:VGGNet以其深度和宽度的设计而闻名。它引入了不同层数和参数量的变体,其中最著名的是VGG16和VGG19。VGG16具有16个卷积层(包括13个卷积层和3个全连接层),VGG19更进一步,具有19个卷积层(包括16个卷积层和3个全连接层)。这种深度和宽度的设计使得VGGNet能够更好地捕捉图像中的细节和抽象特征。

3. 小卷积核:VGGNet采用了较小的3x3卷积核,这是一项重要的设计选择。通过使用小卷积核,VGGNet可以增加网络的深度,减少参数数量,并且具有更强的非线性表达能力。多个3x3卷积层的堆叠等效于一个更大感受野的卷积层,但参数量更少。

4. 池化层:VGGNet使用了最大池化层来减小特征图的空间大小。池化层有助于减少特征图的空间维度,提取更为鲁棒的特征,并且在一定程度上具有平移不变性。

尽管VGGNet相对于其他模型而言较为简单,但它在计算机视觉任务中表现出色,并为后续更深层次和复杂的卷积神经网络的发展奠定了基础。本次采用VGG16。

      1. ResNet

ResNet(Residual Network)是一种深度卷积神经网络架构,由微软研究院的研究团队于2015年提出。它在深度学习领域取得了巨大的成功,并成为许多计算机视觉任务的标准模型之一。ResNet的关键创新是引入了残差连接(residual connections),允许网络在训练过程中更轻松地学习到非常深的层次。

其网络结构如下:

图 6 Resnet-18网络结构

以下是ResNet的主要特点和设计原理:

1. 残差连接:残差连接是ResNet的核心概念。传统的卷积神经网络是通过堆叠多个卷积层构建深层网络,但随着网络层数的增加,出现了梯度消失和梯度爆炸等问题。为了解决这些问题,ResNet引入了跳跃连接(skip connections)或快捷连接(shortcut connections)。残差连接允许网络直接将输入信号绕过一个或多个卷积层,并将其与后续层的输出相加。这样,网络可以更轻松地学习到残差(Residual)信息,从而使得深层网络的训练更加容易。

2. 深度和宽度:ResNet的设计思想是通过增加网络的深度来提高性能。它以层的数量作为网络的关键指标。ResNet的变体包括ResNet-18、ResNet-34、ResNet-50、ResNet-101和ResNet-152,其中数字表示网络的层数。较深的ResNet模型通常具有更好的性能,但也需要更多的计算资源和训练时间。

3. 卷积层堆叠:ResNet在每个卷积层堆叠中使用了相同的基本模块,称为残差块(Residual Block)。每个残差块由两个或三个卷积层组成,其中包括一个1x1卷积层用于降维和恢复维度,以及一个3x3卷积层用于特征提取。在ResNet-50及更深的模型中,还引入了一个额外的1x1卷积层用于进一步减少特征图的维度。

4. 全局平均池化和全连接层:在ResNet的最后,通常使用全局平均池化层将特征图转换为向量表示,然后使用全连接层进行分类或回归。全局平均池化层有助于减少特征图的空间维度,并保留最重要的特征。

ResNet以其深度、残差连接和优秀的性能在计算机视觉任务中获得了广泛的应用。它在图像分类、目标检测、语义分割等任务上取得了许多优秀的结果,并为后续深度神经网络的设计和发展提供了重要的启示。因restnet变体数字越大,网络层数越多,本次实验采用ResNet-18进行一个简单尝试,后续使用更深网络层进行探究。

  • 项目流程

2.1 准备数据

直接下载PaddlePaddle内部的MNIST数据集,再次体会到了PaddlePaddle的方便

2.2 搭建网络

本次实验基于 PaddlePaddle搭建了MLP,LeNet , AlexNetVGGNet和ResNet,其设计和改良如 1.3 所介绍,其

详细代码如下:

2.3 训练配置

接下来,定义训练函数

初始参数如下:

Epochs

Batch_size

verbose

Log_freq

Learning_rate

20

64

1

10

0.0005

其中,利用 Adam优化器更新模型的参数以最小化损失函数使用交叉熵损失函数,利用 loss 和准确率对于模型进行评价。

训练方式如下:

首先,`model_name`被设置为字符串"MLP",用于指定日志写入器的日志目录。

接下来,通过`paddle.callbacks.VisualDL(log_dir=model_name)`创建一个VisualDL日志写入器对象,其中`log_dir`参数指定了日志写入的目录。

然后,创建了MLP模型的实例,并将其打印输出。

接着,通过`paddle.Model(model)`将MLP模型封装到`paddle.Model`对象中,这样可以使用`paddle.Model`提供的训练和评估方法。

最后,调用了一个名为`train`的函数,并将模型和模型名称作为参数传递给该函数进行模型训练。

2.4 超参调节

为进一步得到更好的模型结果,且由于本数据集没有设置验证集,因此利用给定参数空间搜索在测试集上进行超参数的调节,其中,参数调节范围如下表所示:

因搜索最优参数耗时较长,且通过初次训练结果发现,在epoch>10以后的acc增幅较小,MLP,LeNet 两个模型都固定epochs=10,超参数范围如下所示:

    'learning_rate': [0.001, 0.005, 0.01, 0.05]

    'batch_size': [ 128, 256]

搜索代码如下:

对于每个模型搜索得到的最优参数为

模型

learning_rate

batch_size

MLP

0.001

128

LeNet

0.001

256

对于学习率0.01和0.05模型的结果都比较差,经思考觉得是因为学习率过大,会产生振荡,导致训练达不到好的效果。

  • 实验结果

3.1 模型准确率比较

接下来,我比较了各模型在 echos=20 时的模型的表现

模型

Loss

Train_acc

Test_acc

MLP

1.4612

0.9835

0.9726

LeNet

1.4611

0.9955

0.9877

AlexNet

2.3097e-07

0.9959

0.9908

VGGNet16

0.0061

0.9991

0.9937

resnet18

1.5153e-05

0.9987

0.9935

同时,可视化模型表现如以下图:

左列颜色区分下面可视化图:

7 训练过程图

横坐标为step

表格上的这些指标来看,不同模型在测试集上的表现相对较好,准确率都在较高的水平。其中,VGGNet16和ResNet18模型的测试准确率最高,分别达到了0.9937和0.9935。从训练过程图看,AlexNet,resnet18在刚开始训练的时候loss就急剧下降,acc也是迅速达到一个好的效果。不用怎么调参便能达到一个很好的效果。MLP和LeNet两模型的训练速度很快,但acc收敛速度慢,并且loss在较少的epoch中很难达到1以下。

3.2 内部数据集测试

预测结果标签与测试集标签吻合

3.3 泛化能力测试

为了进一步比较模型的泛化能力,我测试了新添加的手写数字图片经过模型验证的结果。新

手写数字图片经过了灰度化处理,并 resize 28*28 的大小,通过已训练好的模型进行测试。测试内容包括自己手写数字照片、网上手写数字照片,经验证,模型可以正确输出结果。

8 测试用图片

成功识别出自己手写的图片
  • 实验感想

在本次实验中,我完整的实现了MLP,LeNet , AlexNetVGGNet和ResNet 的训练过程,并使用了自己制作的新手写数字图片进行测试。这让我对于深度学习高层 Api 的使用有了更深入的理解。同 时,在本次实验中我经过了很久的调参和反复的验证,这让我更加深入的理解了过拟合、正 则化等概念和参数增多在深度学习中的影响。最终,也通过自己写的代码在测试集上达到了 0.9935 的准确率。总得来说,本次实验让我收获颇多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/794905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

彩虹聚合DNS管理系统v1.0全新发布

聚合DNS管理系统(https://github.com/netcccyun/dnsmgr)可以实现在一个网站内管理多个平台的域名解析,目前已支持的域名平台有:阿里云、腾讯云、华为云、西部数码、CloudFlare。本系统支持多用户,每个用户可分配不同的…

vscode+anaconda 环境python环境

环境说明: windows 10 vscodeanaconda anaconda 安装: 1、官网下载地址:Free Download | Anaconda 2、安装 接受协议,选择安装位置,一直next,到下面这一步,上面是将Anaconda 添加至环境变量&#xff0…

linux使用supervisor部署springboot

supervisor 美:[suːpərvaɪzər ] n.监督人;主管人;指导者; Supervisor是一个进程控制系统工具,用于在Linux系统上管理和监控其他进程。它可以启动、停止、重启和监控应用程序或服务,并在其异常退出时自动重启它们。Supervisor通过提供一个…

idea开发 java web 配电室后台管理系统bootstrap框架web结构java编程计算机网页

一、源码特点 java 配电室后台管理系统是一套完善的完整信息系统,结合java web开发和bootstrap UI框架完成本系统 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主 要采用B/S模式开发。 前段主要技术 cs…

阿里 Arthas 工具使用

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信…

苹果CMSV10整合dplayer播放器增加记忆+P2P播放+自动下一集功能插件详细保姆级教程

1.本站已打包&#xff0c;可以直接下载然后上传到你服务器的苹果CMS网站static/player目录下就可以了&#xff0c;下面是教程 wlm3u8.js代码&#xff1a; MacPlayer.Html <iframe border"0" src"mac<span class"wp_keywordlink"><a hre…

全国航空机场分布矢量数据/旅游景点poi/全国港口码头分布/地铁站分布/火车站分布/POI矢量数据

民用航空机场是指针对包括跑道型机场、表面直升机场、高架直升机场、船上直升机场、直升机水上平台、滑翔机场、水上机场、有人操纵气球施放场以及其他专供民用航空器起降的划定区域。民用航空机场分为通用航空机场和公共运输机场&#xff1b;不包括临时机场和专用机场。 根据中…

SSM项目实战——哈哈音乐(四)前台模块开发

1、项目准备 ①导入依赖和前端资源 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.x…

解决element-plus table组件 fixed=“right“(left)浮动后横向滚动文字穿透的问题

BUG 版本&#xff1a;element-plus 2.6.1 浏览器&#xff1a;360极速浏览器22.1 (Chromium内核) 组件&#xff1a;el-table组件 问题&#xff1a;在头部/尾部浮动加上斑马条纹后&#xff0c;横向滚动存在文字穿透的问题。具体如图&#xff1a; 白色背景行的文字&#xff0c…

蓝桥杯单片机真题实践篇

这里就不完全写思路过程代码什么的&#xff0c;这一篇文章就写我在训练真题中遇到的过程。 &#xff08;呜呜呜&#xff0c;时间不够辣&#xff0c;能做多少算多少吧....&#xff09; 十三届省赛题 问题1&#xff1a;数码管的数字消影不明显 &#xff08;参考&#xff1a;蓝…

【蓝桥杯-单链表-网络寻路】

蓝桥杯-单链表-网络寻路 单链表基本操作操作一&#xff1a;向链表头插入一个数操作二:在第 k个插入的数后插入一个数操作三&#xff1a;删除第 k个插入的数后面的一个数&#xff1b; P8605 [蓝桥杯 2013 国 AC] 网络寻路 单链表基本操作 初始化有关操作 // head 表示头结点的…

python-基础篇-字符串、列表、元祖、字典-列表

文章目录 2.3.2列表2.3.2.1列表介绍2.3.2.1.1列表的格式2.3.2.1.2打印列表 2.3.2.2列表的增删改查2.3.2.2.1列表的遍历2.3.2.2.1.1使用for循环2.3.2.2.1.2使用while循环 2.3.2.2.2添加元素("增"append, extend, insert)2.3.2.2.2.1append 2.3.2.2.2.2extend2.3.2.2.2…

考研回忆录【二本->211】

备考时长差不多快一年半&#xff0c;从22年的11月底开始陆陆续续地准备考研&#xff0c;因为开始的早所以整个备考过程显得压力不是很大&#xff0c;中途还去一些地方旅游&#xff0c;我不喜欢把自己绷得太紧。虽然考的不是很好&#xff0c;考完我甚至都没准备复试&#xff0c;…

12-1-CSS 常用样式属性

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 CSS 常用样式属性1 CSS 三角形2 CSS 用户界面样式2.1 什么是界面样式2.2 鼠标…

微电网优化:基于​海象优化算法(Walrus Optimization Algorithm,WOA)​的微电网优化(提供MATLAB代码)

一、微电网优化模型 微电网是一个相对独立的本地化电力单元&#xff0c;用户现场的分布式发电可以支持用电需求。为此&#xff0c;您的微电网将接入、监控、预测和控制您本地的分布式能源系统&#xff0c;同时强化供电系统的弹性&#xff0c;保障您的用电更经济。您可以在连接…

(学习日记)2024.04.02:UCOSIII第三十节:信号量

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

Ps:预览调整 32 位 HDR 图像

由于 HDR 图像的动态范围超出了标准计算机显示器的显示范围。在 Photoshop 中打开 HDR 图像时&#xff0c;图像可能会非常暗或出现褪色现象。 Photoshop 提供了专门的预览调整功能&#xff0c;以使标准显示器显示的 HDR 图像的高光和阴影不会太暗或出现褪色现象。 预览调整设置…

docker的安装及入门指令

目录 一、将docker安装到云服务器步骤 1.更新系统yum版本 2.安装所需依赖 3.添加docker仓库设置(使用的是阿里云) 4.安装docker引擎 5.启动docker并开启自动启动 6. 检查是否安装成功&#xff0c;成功会显示相应版本&#xff0c;否则安装失败 二、docker常用命令 1.从…

最优算法100例之33-数据流的中位数

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。 例如, [2,3,4] 的中位数是 3 [2,3] 的中位…

Map源码解析

基本介绍 其实HashMap底层是个什么东西我们之前也讲过, 就是一个哈希桶(差不多可以看成一个数组), 然后每一个节点又连接着链表/红黑树之类的, 下面让我们看一看具体在源码上是怎样实现的: 常量及其它 -> static final int DEFAULT_INITIAL_CAPACITY 1 << 4; //这个…