(共31张PPT)
第三课时
建立手写数字识别
模型并进行验证
信息技术沪教版
必修1
项目九
了解手写数字识别
——体验人工智能
目
录
一、建立手写数字识别模型并进行验证
二、深度学习
三、深度学习的主要算法之——卷积神经网络
四、用Python语言通过卷积神经网络来建立和验证模型
五、课后作业
一、建立手写数字识别模型并
进行验证
建立手写数字识别模型的过程,就是对
Train
集合进行训练的过程,建立的模型其实就是从样本数据中学习得到的结果。
建立模型时,首先要选择合适的学习算法,然后利用学算法对样本进行训练。手写数字识别属于分类问题。对于分类问题来说,得到的这个模型就是通常所说的识别器。
机器学习发展至今,众多学者已经提出了非常多的算法,练如决策树、逻辑回归等。近年来,由于大数据的不断积累和我计算机性能的提升,基于多层神经网络的深度学习算法表现出更强劲的性能,在学术界和工业界受到了广泛关注。但各种算法其实并没有绝对的好坏之分,应该根据不同的应用场合,选择较适合的算法。
二、深度学习
深度学习(
deep
learning)是机器学习的一个分支,在取特征方面表现得很强大。它可以从数据中学习由简单特征组合而成的复杂特征,使后面的学习更加有效。
三、深度学习的主要算法之
——卷积神经网络
1.定义
2.历史
3.应用
A
B
C
卷积神经网络(Convolutional
Neural
Networks,
CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward
Neural
Networks),是深度学习(deep
learning)的代表算法之一??。
1.定义
A
B
C
卷积神经网络具有表征学习(representation
learning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariant
classification),因此也被称为“平移不变人工神经网络(Shift-Invariant
Artificial
Neural
Networks,
SIANN)”??。
1.定义
A
B
C
2.历史
第一个卷积神经网络是1987年由Alexander
Waibel等提出的时间延迟网络。
第一个卷积神经网络
由贝尔实验室完成代码开发并被部署于的支票读取系统
完成代码开发
卷积神经网络的表征学习能力得到了关注,并随着数值计算设备的更新得到发展。
深度学习理论被提出后
在其1979和1980年发表的论文中,福岛仿造生物的视觉皮层设计了以“neocognitron”命名的神经网络。
神经网络
1988年,Wei
Zhang提出了第一个二维卷积神经网络
第一个二维卷积神经网络
1998年Yann
LeCun及其合作者构建了更加完备的卷积神经网络LeNet-5并在手写数字的识别问题中取得成功?。
更加完备的卷积神经网络
1987
1988
1993
1980
2003
1998
ZFNet
ResNet
AlexNet
VGGNet
2013
2014
2015
2012
A
B
C
(1)计算机视觉
3.应用
图像识别
(image
classification)
行为认知
(neural
style
transfer)
姿态估计
(object
recognition)
物体识别
(action
recognition)
神经风格迁移
(pose
estimation)
A
B
C
(2)自然语言处理
3.应用
A
B
C
(3)其它
3.应用
物理学
遥感科学
大气科学
四、用Python语言通过卷积神经网络来建立和验证模型
卷积神经网络在图像分类上有非常出色的表现。因此,这里将用Python语言通过卷积神经网络来建立和验证模型。
for
i
in
range(10000):
batch=MNIST.train.next_batch(100)
If
i%200==0:
Print("当前迭代次数为%d,训练正确率为%g"%(i,accuracy.eval
(feed_dict={x:batch[0],
y_:batch[1],keep_prob:
1.0})))
train_step.run(feed_dict={x:batch[0],y_:
batch[l],keep_prob:
0.5})
1
第1行代码
设置了一个参数,即总的迭代次数为10000次;
for
i
in
range(10000):
batch=MNIST.train.next_batch(100)
If
i%200==0:
Print("当前迭代次数为%d,训练正确率为%g"%(i,accuracy.eval
(feed_dict={x:batch[0],
y_:batch[1],keep_prob:
1.0})))
train_step.run(feed_dict={x:batch[0],y_:
batch[l],keep_prob:
0.5})
2
第2行代码
设置了另一个参数,即每次送入卷积神经网络中进行训练的图片数为100张;
for
i
in
range(10000):
batch=MNIST.train.next_batch(100)
If
i%200==0:
Print("当前迭代次数为%d,训练正确率为%g"%(i,accuracy.eval
(feed_dict={x:batch[0],
y_:batch[1],keep_prob:
1.0})))
train_step.run(feed_dict={x:batch[0],y_:
batch[l],keep_prob:
0.5})
3
第3至5行代码
设置了第三个参数,即每间隔200次迭代,在控制台输出当前迭代次数下模型的识别正确率;
for
i
in
range(10000):
batch=MNIST.train.next_batch(100)
If
i%200==0:
Print("当前迭代次数为%d,训练正确率为%g"%(i,accuracy.eval
(feed_dict={x:batch[0],
y_:batch[1],keep_prob:
1.0})))
train_step.run(feed_dict={x:batch[0],y_:
batch[l],keep_prob:
0.5})
4
最后一行代码
train_step.run是最关键的进行训练的代码,它针对当前批次的样本进行训练,得出相应模型。
当前迭代次数为0,训练正确率为0.08
当前迭代次数为200,训练正确率为0.88
当前迭代次数为400,训练正确率为0.94
当前迭代次数为600,训练正确率为0.95
当前迭代次数为800,训练正确率为0.95
当前迭代次数为1000,训练正确率为0.96
当前迭代次数为1200,训练正确率为0.96
当前迭代次数为1400,训练正确率为0.99
1.为什么建立模型的过程需要进行反复迭代?
2.预设的迭代次数与最终模型之间有什么关系?
五、课后作业
以小组为单位,利用配套资源中的相关代码,尝试设置不同的参数,运行程序并观察控制台输出的结果,研究不同的参数设置对训练出来的模型的正确率有何不同影响。
谢谢
21世纪教育网(www.21cnjy.com)
中小学教育资源网站
有大把高质量资料?一线教师?一线教研员?
欢迎加入21世纪教育网教师合作团队!!月薪过万不是梦!!
详情请看:
https://www.21cnjy.com/help/help_extract.php中小学教育资源及组卷应用平台
项目九
了解手写数字识别
——体验人工智能
第三课时
建立手写数字识别模型并进行验证
■教材分析
“建立手写数字识别模型并进行验证”这一小节,通过建立手写数字识别模型的过程,就是对Train集合进行训练的过程,了解机器学习的一个分支——深度学习的主要算法之一:卷积神经网络(Convolutional
Neural
Network,CNN)。
■教学目标
1、知识和技能
了解机器学习中的深度学习。
2、过程与方法
通过建立手写数字识别模型的过程,让学生了解卷积神经网络。
3、情感态度与价值观
(1)了解手写数字识别的核心技术———机器学习,感受人工智能技术。学生通过了解人工智能和机器学习的含义、应用及作用,提升对人工智能技术作用的认识,发展信息社会责任;
(2)通过学生通过使用
Python
及其第三方工具进行手写数字识别学习过程的体验,在完成项目的过程中了解人工智能解决问题的思想方法,促进计算思维的形成与发展。
■教学重点:
了解机器学习中的深度学习。
■教学难点:
了解卷积神经网络
■教学准备
计算机教室,Python,投影机。
■教学过程:
一、建立手写数字识别模型并进行验证
建立手写数字识别模型的过程,就是对
Train集合进行训练的过程,建立的模型其实就是从样本数据中学习得到的结果。建立模型时,首先要选择合适的学习算法,然后利用学算法对样本进行训练。手写数字识别属于分类问题。对于分类问题来说,得到的这个模型就是通常所说的识别器。
机器学习发展至今,众多学者已经提出了非常多的算法,练如决策树、逻辑回归等。近年来,由于大数据的不断积累和我计算机性能的提升,基于多层神经网络的深度学习算法表现出更强劲的性能,在学术界和工业界受到了广泛关注。但各种算法其实并没有绝对的好坏之分,应该根据不同的应用场合,选择较适合的算法。
二、深度学习
深度学习(
deep
learning)是机器学习的一个分支,在取特征方面表现得很强大。它可以从数据中学习由简单特征组合而成的复杂特征,使后面的学习更加有效。
AlphaGo战胜人类职业围棋棋手的原因就在于其拥有的强大深度学习和搜索运算能力。
三、深度学习的主要算法之——卷积神经网络(
Convolutional
Neural
Network,CNN)
1.定义
卷积神经网络(Convolutional
Neural
Networks,
CNN)是一类包含卷积
(?https:?/??/?baike.baidu.com?/?item?/?%E5%8D%B7%E7%A7%AF?/?9411006"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)计算且具有深度结构的前馈神经网络
(?https:?/??/?baike.baidu.com?/?item?/?%E5%89%8D%E9%A6%88%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C?/?7580523"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)(Feedforward
Neural
Networks),是深度学习
(?https:?/??/?baike.baidu.com?/?item?/?%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0?/?3729729"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)(deep
learning)的代表算法之一??。卷积神经网络具有表征学习
(?https:?/??/?baike.baidu.com?/?item?/?%E8%A1%A8%E5%BE%81%E5%AD%A6%E4%B9%A0?/?2140515"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)(representation
learning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariant
classification),因此也被称为“平移不变人工神经网络(Shift-Invariant
Artificial
Neural
Networks,
SIANN)”??。
对卷积神经网络的研究始于二十世纪80至90年代,时间延迟网络和LeNet-5是最早出现的卷积神经网络;在二十一世纪后,随着深度学习理论的提出和数值计算设备的改进,卷积神经网络得到了快速发展,并被应用于计算机视觉
(?https:?/??/?baike.baidu.com?/?item?/?%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89?/?2803351"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)、自然语言处理
(?https:?/??/?baike.baidu.com?/?item?/?%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86?/?365730"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)等领域?。
卷积神经网络仿造生物的视知觉(visual
perception)机制构建,可以进行监督学习
(?https:?/??/?baike.baidu.com?/?item?/?%E7%9B%91%E7%9D%A3%E5%AD%A6%E4%B9%A0?/?9820109"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)和非监督学习
(?https:?/??/?baike.baidu.com?/?item?/?%E9%9D%9E%E7%9B%91%E7%9D%A3%E5%AD%A6%E4%B9%A0?/?16588789"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?),其隐含层内的卷积核参数共享和层间连接的稀疏性使得卷积神经网络能够以较小的计算量对格点化(grid-like
topology)特征,例如像素和音频进行学习、有稳定的效果且对数据没有额外的特征工程(feature
engineering)要求
2.历史
HYPERLINK
"https://baike.baidu.com/pic/%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/17541100/0/bf096b63f6246b6087d93725e6f81a4c500fa288?fr=lemma&ct=single"
\o
"neocognition的构筑与特征可视化"
\t
"https://baike.baidu.com/item/_blank"
对卷积神经网络的研究可追溯至日本学者福岛邦彦(Kunihiko
Fukushima)提出的neocognitron模型。在其1979和1980年发表的论文中,福岛仿造生物的视觉皮层
(?https:?/??/?baike.baidu.com?/?item?/?%E8%A7%86%E8%A7%89%E7%9A%AE%E5%B1%82?/?10986729"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)(visual
cortex)设计了以“neocognitron”命名的神经网络。neocognitron是一个具有深度结构的神经网络,并且是最早被提出的深度学习算法之一,其隐含层由S层(Simple-layer)和C层(Complex-layer)交替构成。其中S层单元在感受野
(?https:?/??/?baike.baidu.com?/?item?/?%E6%84%9F%E5%8F%97%E9%87%8E?/?8989338"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)(receptive
field)内对图像特征进行提取,C层单元接收和响应不同感受野返回的相同特征。neocognitron的S层-C层组合能够进行特征提取和筛选,部分实现了卷积神经网络中卷积层
(?https:?/??/?baike.baidu.com?/?item?/?%E5%8D%B7%E7%A7%AF%E5%B1%82?/?22701737"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)(convolution
layer)和池化层(pooling
layer)的功能,被认为是启发了卷积神经网络的开创性研究。
第一个卷积神经网络是1987年由Alexander
Waibel等提出的时间延迟网络(Time
Delay
Neural
Network,
TDNN)。TDNN是一个应用于语音识别
(?https:?/??/?baike.baidu.com?/?item?/?%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB?/?10927133"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)问题的卷积神经网络,使用FFT
(?https:?/??/?baike.baidu.com?/?item?/?FFT?/?4766072"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)预处理的语音信号作为输入,其隐含层由2个一维卷积核组成,以提取频率域上的平移不变特征。由于在TDNN出现之前,人工智能领域在反向传播算法
(?https:?/??/?baike.baidu.com?/?item?/?%E5%8F%8D%E5%90%91%E4%BC%A0%E6%92%AD%E7%AE%97%E6%B3%95?/?522948"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)(Back-Propagation,
BP)的研究中取得了突破性进展,因此TDNN得以使用BP框架内进行学习。在原作者的比较试验中,TDNN的表现超过了同等条件下的隐马尔可夫模型
(?https:?/??/?baike.baidu.com?/?item?/?%E9%9A%90%E9%A9%AC%E5%B0%94%E5%8F%AF%E5%A4%AB%E6%A8%A1%E5%9E%8B?/?7932524"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)(Hidden
Markov
Model,
HMM),而后者是二十世纪80年代语音识别的主流算法?。
1988年,Wei
Zhang提出了第一个二维卷积神经网络:平移不变人工神经网络(SIANN),并将其应用于检测医学影像
(?https:?/??/?baike.baidu.com?/?item?/?%E5%8C%BB%E5%AD%A6%E5%BD%B1%E5%83%8F?/?4954291"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)?。独立于Zhang
(1988),Yann
LeCun在1989年同样构建了应用于计算机视觉问题的卷积神经网络,即LeNet的最初版本。LeNet包含两个卷积层,2个全连接层,共计6万个学习参数,规模远超TDNN和SIANN,且在结构上与现代的卷积神经网络十分接近?[11]??。LeCun
(1989)?对权重进行随机初始化后使用了随机梯度下降(Stochastic
Gradient
Descent,
SGD)进行学习,这一策略被其后的深度学习研究所保留。此外,LeCun
(1989)在论述其网络结构时首次使用了“卷积”一词??,“卷积神经网络”也因此得名。
LeCun
(1989)?的工作在1993年由贝尔实验室
(?https:?/??/?baike.baidu.com?/?item?/?%E8%B4%9D%E5%B0%94%E5%AE%9E%E9%AA%8C%E5%AE%A4?/?686816"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)(AT&T
Bell
Laboratories)完成代码开发并被部署于NCR(National
Cash
Register
Coporation)的支票读取系统。但总体而言,由于数值计算能力有限、学习样本不足,加上同一时期以支持向量机
(?https:?/??/?baike.baidu.com?/?item?/?%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA?/?9683835"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)(Support
Vector
Machine,
SVM)为代表的核学习(kernel
learning)方法的兴起,这一时期为各类图像处理问题设计的卷积神经网络停留在了研究阶段,应用端的推广较少。
在LeNet的基础上,1998年Yann
LeCun及其合作者构建了更加完备的卷积神经网络LeNet-5并在手写数字的识别问题中取得成功?。LeNet-5沿用了LeCun
(1989)
的学习策略并在原有设计中加入了池化层对输入特征进行筛选。LeNet-5及其后产生的变体定义了现代卷积神经网络的基本结构,其构筑中交替出现的卷积层-池化层被认为能够提取输入图像的平移不变特征?。LeNet-5的成功使卷积神经网络的应用得到关注,微软在2003年使用卷积神经网络开发了光学字符读取(Optical
Character
Recognition,
OCR)系统?。其它基于卷积神经网络的应用研究也得到展开,包括人像识别、手势识别等。
在2006年深度学习
(?https:?/??/?baike.baidu.com?/?item?/?%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0?/?3729729"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)理论被提出后,卷积神经网络的表征学习能力得到了关注,并随着数值计算设备的更新得到发展。自2012年的AlexNet?开始,得到GPU计算集群支持的复杂卷积神经网络多次成为ImageNet
(?https:?/??/?baike.baidu.com?/?item?/?ImageNet?/?17752829"
\t
"https:?/??/?baike.baidu.com?/?item?/?_blank?)大规模视觉识别竞赛(ImageNet
Large
Scale
Visual
Recognition
Challenge,
ILSVRC)的优胜算法,包括2013年的ZFNet?、2014年的VGGNet、GoogLeNet和2015年的ResNet。
3.应用
(1)计算机视觉
A、图像识别(image
classification)
B、物体识别(object
recognition)
C、行为认知(action
recognition)
D、姿态估计(pose
estimation)
E、神经风格迁移(neural
style
transfer)
(2)自然语言处理
(3)其它
A、物理学
B、遥感科学
C、大气科学
四、用Python语言通过卷积神经网络来建立和验证模型
卷积神经网络在图像分类上有非常出色的表现。因此,这里将用Python语言通过卷积神经网络来建立和验证模型。
训练过程的主要代码如下所示。
第1行代码,设置了一个参数,即总的迭代次数为10000次;第2行代码,设置了另一个参数,即每次送入卷积神经网络中进行训练的图片数为100张;第3至5行代码,设置了第三个参数,即每间隔200次迭代,在控制台输出当前迭代次数下模型的识别正确率;最后一行代码,
train_step.run是最关键的进行训练的代码,它针对当前批次的样本进行训练,得出相应模型。训练结果如下图所示。
从上图可以看到,随着训练的不断继续,模型的识别正确率也不断得到提升。当前迭代次数下模型的识别正确率是通过
Validation
集合计算得到的,这个过程就是验证模型。
由于卷积神经网络模型训练过程中选取训练样本的随机性,每次得到的结果不会完全相同。本代码经过10000次迭代,可以得到能识别未知数字的最终模型。
思考与过论
1.为什么建立模型的过程需要进行反复迭代?
2.预设的迭代次数与最终模型之间有什么关系?
五、课后作业
以小组为单位,利用配套资源中的相关代码,尝试设置不同的参数,运行程序并观察控制台输出的结果,研究不同的参数设置对训练出来的模型的正确率有何不同影响。
for
i
in
range(10000):
batch=MNIST.train.next_batch(100)
If
i%200==0:
Print("当前迭代次数为%d,训练正确率为%g"%(i,accuracy.eval
(feed_dict={x:batch[0],
y_:batch[1],keep_prob:
1.0})))
train_step.run(feed_dict={x:batch[0],y_:
batch[l],keep_prob:
0.5})
当前迭代次数为0,训练正确率为0.08
当前迭代次数为200,训练正确率为0.88
当前迭代次数为400,训练正确率为0.94
当前迭代次数为600,训练正确率为0.95
当前迭代次数为800,训练正确率为0.95
当前迭代次数为1000,训练正确率为0.96
当前迭代次数为1200,训练正确率为0.96
当前迭代次数为1400,训练正确率为0.99
21世纪教育网
www.21cnjy.com
精品试卷·第
2
页
(共
2
页)
HYPERLINK
"http://21世纪教育网(www.21cnjy.com)
"
21世纪教育网(www.21cnjy.com)