当前课程知识点:计算思维与人工智能基础 >  第三部分:python基础 >  第十章:实例分析与实践 >  10.3手写数字识别

返回《计算思维与人工智能基础》慕课在线视频课程列表

10.3手写数字识别在线视频

下一节:10.4卷积神经网络的介绍

返回《计算思维与人工智能基础》慕课在线视频列表

10.3手写数字识别课程教案、知识点、字幕

下面我们给大家介绍

运用神经网络的模型来去

实现手写数字识别的应用

为了方便

业界进行统一测试和评估算法

1998年

Lecun

Bottou

Bengio和Haffner

发布了手写数字图片的数据集

命名为MNIST

MNIST就是一个简单的

计算机视觉数据集

就是由许多的手写数字图片组成的

我们可以在这个网址下

下载这个数据集

通常的我们装了一些框架的话

是会包含这个数据集的

那么这个数据集是比较经典的

图像识别的数据集

我们前面给大家装了

TrensorFlow

那么这个TrensorFlow的

框架下是包含这个数据集的

这个数据集呢

主要包括两部分

一部分是测试集

一部分是训练集

训练集里面有

60000个图像的样本

和对应的60000个标签

测试集里有10000个

图像样本和10000个标签

那么这些图像的样本图片呢

都是由28×28小数点来构成的

数据及的导入我们可以在

TrensorFlow框架下的

tf.

keras.datasets.

mnist.load_

data()

那么这个通过这条语句呢

我们可以把训练集和测试集导入

也可以在

matplotlib下面去展示

那么它展示出来的就是这样子的

我们可以看到它是由什么呀

0到255的灰度值

来去来显示这个值的

那么如果

我们用矩阵来描述的话

一张28×28的图片来构成

这个标签呢就是0-9的数字

那么在实际的存放中应用中

我们考虑到这个数字之间的关系

所以我们采用这个one-hot

这个编码来取存放

那在这个里面的话

可以输入的时候就把它转换成

一个1×784的一个矩阵

那么输出呢

我们可以用1×10的矩阵来去构建

在这里面的one-hot的编码

形式是这样子

我们可以看的到

有一行组成的

我们这个行业里面最大值的这个下标

其实就是对应我们数字

通过这样的特点

我们可以取出来我们的这个数字

我们前面介绍了这个线性模型

怎样去构建的话我们想

如果只要构建一个线性的模型的话

我们可以看的到

输出的话就等于输入的x全值与b

这里面输入x的矩阵

所以我们的全值也是一个矩阵

进来是1,784

那么全职呢就是应该是784

那输出是10的话

1×10的这样的矩阵

全职就应该是10偏值是10

那么就构成这样的一个矩阵的一个组合

那么对于复杂的问题

我们用线性回归呢

是要寻找优还是比较难的

所以我们需要进行什么呀

多次的迭代

并且做一些非线性化的一些处理

我们通过添加激活函数

前面我们给大家介绍过激活函数有什么呀

我们在这个地方呢是用

今年我们选用这个ReLU函数

ReLU函数的特点大家可以看得到

X小于0的时候它就是0

X大于0的时候呢它就是原来的值

那么ReLU呢它实现了

稀疏后的模型能够

更好的去挖掘相关特征

以及

拟合这个训练数据

那么使模型的这个收敛速度

维持在一个稳定的一个状态

那我们来可以看到

我如果是

多次把这个模型进行迭代

我们说迭代三次呢

我们可以看到进来的是

1乘以784这样的一个矩阵

那么刚才说我们的全值就是

行一定是784

这个列也可以自己构造

构造成256

那么得到这个

H1就是一乘以256这样的矩阵

那么在下面的再一次去

迭代这个模型的时候

他这个全值可以256是定的

我们可以选择128

那么得到的这个H2 1乘以28

W3对应的行肯定是128

列呢是我们输出是1×10的

这样一个one-hot的编码

所以这个列这个地方必须要是10

这就是三层的

我们这个结构已经构建好了

然后在三层迭代

其实这个迭代的

就可以得到我们的一个输出

那么这个输出的话是一个迭代的公式

我们用统一的写法都可以写成这样子

这不就是输出通过relu

第一层第二层第三层

那么每一个输出值

最后得到的结果是一个概率

那么通过这个Lmax呢

我们得到这个最大值的这个缩影

因为这个地方只有一行

所以我们就可以不写

我们在这个地方寻U的时候

也是通过梯度下降法来寻U的

我们这个损失的是定义的均方差损失

那么对应要训练的参数呢

就是我们从W1 784×256

W2 256×128

W3是128×10

然后b1 b2 b3

那这个训练

要训练这么多的参数

那么从这个结构上来看呢

其实我们已经构建了

一个全连接的三层的神经网络

我们再看一下它的结构

那么这个我们构建了一个

全连接的三层网络

第一个输入层这就是我们的一个偏执

然后呢 这是什么呀

我们的X 0到x的783

我们这个矩阵七八次的输入

那么这个里面的全值

全值矩阵就是我们的784×256

那么就相当于这是这条线啊

那么就有这么多条线

那么得到的H1呢

1×256

那么在第二层的话我们

得到全值的是256×128

h2的时候呢

我们可以得到的是什么呀

H2的时候我们就是256

然后第三层的全职呢是128×10

我们所以的到输出是什么

1×10的

这样的一个one-hot的编码

这就是我们这个全连接

这个三层的神经网络的一个构建

那么其实是从一个

从我们线型模型

然后转化成这样一个非线型

然后再多层的迭代构建出来

三层的神经网络模型

下面我们在jupyter下面

来实现这段代码

看一下它的执行结果

我们来在jupyter下看一下

我们首先导入

我们的TrensorFlow框架

以及TrensorFlow下

应用的keras的像这个数据集

还有我们模型构建需要的一些函数包

下面这个就是我们把数据集导入

导入数据集呢

我们可以看一下

我们训练集测试集的个数

可以看训练集有60000个

测试集10000个

我们也可以通过

matplotlib来看一下图片

我们可以看到

这是Y第0个元素的训练集

和X第0个元素这个图片

我们把它把它转换成

28×28的图片可以看的到

那么这个训练集的标签是5

然后我们在训练集的图片是这样子

我们可以看也是一个5

那么当然这个后面的这个

28×28日我们看起来最好

这个本身就是由这个像素点组成

其实也是可以进行变换的

比如说我们把它变换成14

256的这样的一个格式的话

那么它出图片就出这样的

把它两个拆分成两个了

那么在下面的在训练之前

我们需要对这个数据

因为这个里面的这个像素点

是0到255的

我们需要把这个像素点的这个数据呢

把它归一化处理

把它变成0,1之间的数据

所以我们可以除以255

把X的训练集那就是图片X训练图片

和我们的测试图片都做一个转换

转换以后呢 下面呢

我们就可以去构建我们的什么网络

这是我们去训练之前

要做的一些简单的准备

需要我们把这个定义多少批

然后shuffle就是我们多少

到了一千张图片

把他这个洗牌一下洗一下牌

然后我们把它设成可以什么

那可迭代的

我们再可以看一下

我们出来这个sample形状

它会是什么样子的

这是我们其实相当于

一批就是128章

28× 28的图片

那么的标签当然也是128个

那么在修炼之前呢

我们是需要构建我们的参数的

我们前面给大家介绍

w1,b1,

w2,b2,

w3,b3

我们初始的参数呢

我们是通过一个random函数

来去构建它我们在这儿都是通过

满足一个均方差的一个阶段的

一个正态分布的函数来去构建

构建好了以后

我们就是可以去做我们的构建的模型

构建的模型呢

其实我们可以看的到

主要是要通过梯度下降来去完成

那么在这个里面呢

我们看H1这是我们的线性

然后通过relu函数非线性

H二的relu然后呢

我们的输出

输出的他是一个

one-hot的编码

要转换成one-hot的编码

然后这是我们的损失函数

输出one-hot

我们的实际的这个输出跟我们的

我们因为这个标签

我们刚才说的是

前面展示了标签出来的是数字

那数字的可以看到这样的

标签是一个数字

所以我们要把它

转换成one-hot的编码

那one-hot的编码转换完以后

我们可以进行求它的损失

然后均方差损失

那这一段是我们要

构建我们的梯度下降法

那么训练的参数在这里面

w1,b1,

w2,b2,

w3,b3

每一次梯度下降法是需要一个学习率

所以我们在前面就给了一个学习率

那么每一批次

数据集的这个批次进行这个迭代的话

建立了一个循环

刚开始我们把X和X进来的数据

把它进行一个转换转换成浮点数

那下面呢这个就是

关于梯度下降法参数的训练

以及我们参数的更新

那么在这个里面的是训练

100批的话就会输出一个损失值

其实我们可以看的到

我们首先来看训练一下

100有一个损失

我们训练三次以后我们看下损失

每次训练完了以后他的参数

这个W1,W2,W3

以及b1,b2在变化

我们可以在这个基础上

这是初始化的参数

这是训练化的参数

我们其实可以再给它训练一遍

训练一遍

大家可以观察它就比刚才的损失

要更小一些了

我们可以看到

它的第二次训练后他的损失

大概在0.09到1之间

我们可以看一下它的这个训练后的它

我们这个参数有多少个

那么参数就是

W1,W2,W3的

我们这个矩阵的情况

这是它的结构

他们训练完这个训练这个参数

其实下面我们就可以应用应用的话

比如说我们现在可以看一个

预测一个

下标是4的标签

下标是4的标签它出来是4

我们的预测的时候我们可以看

测试集里面我们也下标是4

他们是对应下标是4

那么这个图片

来了我们需要把它转换成什么样

转换成784

那么这个里面这个

-1是可以随便定的

那么转换成浮点数

然后按照我们这个模型

求H1,H2然后再输出

然后我们通过argmax呢

就是把它转换成下标

我们输出下标就是这个预测

所以他这个预测出来的值

这个是我们的输出来的应该是

one-hot的编码

而我们这个是预测的什么我的值

我们预测一下可以看的到啊

这就是出现了一个误差

这里是4的时候这个地方是4

而这个地方是什么呀

这是他的one-hot的编码

one-hot编码出来

我们看下标是什么呀

下标是2的时候02

这是一个什么

这是一个最大值

他是差了一点点这个四也不小

然后但是这个2是大这就是误差

我们刚才有10%的误差

那么再来一个号再测一个

7啊

那我们可以看第7个

它是9

我们在这个地方在看这个7

他算出来的是什么

算出来的这个预测的6

也是有误差的

再来看一下我们这个

5

运行一下是1

这个他应该预测的应该是准确

然后我们可以看到

他这个是预测准确

那么这就是可以看到误差的

那么再是一个90

预测出来的是3

在这个地方90

我们在预测一下

我们可以看到

他这个误差率还稍有点高

我们可以再去训练

那么在去训练一下

训练一下参数

让我们的误差可以再降低一点

我们可以看比刚才的误差有所降低

刚才都是在一点多在零点零几

我们这个训练的误差了以后呢

我们可以用训练的新值

然后我们在这个地方再测再测一次

比如说我们在测一个第9个元素

那么标签还是9

那我们也测一下

这个看它的结果是不是正确

那么可以看在训练了以后

刚才是不准确

那么这个 准确

我们刚才这90让我们也在测一下

90呢它是3

我们这个地方看看90

它给我们出来的是预设的是多少

预测的是3

这就是我们的可以看得到这个

这个我们就可以看的到

预测的准确率会随着我们的训练

它可以不断的提高

但是他也会有一个上界值

就是每一个模型呢

他达到那个集值以后

就不可以再提高了

那这就是我们全连接网络的实现

计算思维与人工智能基础课程列表:

第一部分:计算思维

-1.计算思维的提出

-2.计算思维的要素与应用

-3.培养计算思维

-4.智能时代的教师与教学

-章测试

第二部分:人工智能

-1.人工智能的发展

-2.人工智能的实现与机器学习

-3.人工智能产业

-章测试

第三部分:python基础

-第一章:python简介

--1.1python的介绍

--1.2.anaconda的安装

--章测试

-第二章:编码规范

--2.1 python编码规范

--2.2常量和变量

--章测试

-第三章:数据类型

--3.1数据类型概述

--3. 2.数据转换

--3.3数据类型区别

--章测试

-第四章:基本运算

--4.1.基本运算符

--4.2比较运算符

--4.3逻辑运算符

--4.4位运算符

--4.5成员运算符与身份运算符

--4.6运算符的优先级

--章测试

-第五章:程序控制结构

--5.1顺序结构

--5.2条件结构

--5.3循环结构

--5.4跳转结构

--5.5异常处理

--章测试

-第六章:函数、模块与面向对象

--6.1函数的定义与调用

--6.2面向对象

--6.3魔法函数的应用

--6.4模块与包

--章测试

-第七章:文件操作

--7.1文件的打开与读取

--7.2文件的写入

--7.3CSV模块的应用

--章测试

-第八章:python生态库

--8.1第三方库的安装

--8.2标准库-Os库与Sys库

--8.3.标准库-Time库

--8.4标准库-Random库

--8.5标准库-Turtle库

--8.6第三方库-词云库

--8.7第三方库-pyinstaller库

--8.8第三方库-numpy库(上)

--8.9第三方库-numpy库(下)

--8.10第三方库-pandas库

--8.11第三方库-matplotlib库

--章测试

-第九章:TensorFlow基础

--9.1TensorFlow简介

--9.2TensorFlow 2.0的改进

--9.3TensorFlow的数据应用

--9.4 TensorFlow的设备应用

--9.5.TensorFlow中常用操作

--章测试

-第十章:实例分析与实践

--10.1认识回归问题

--10.2房价的预测

--10.3手写数字识别

--10.4卷积神经网络的介绍

--10.5全连接网络的搭建

--10.6卷积神经网络的实现服饰图片的分类

--10.7LeNet的介绍

--章测试

-第十一章:人工智能在自然语言中的应用

--11.1自然语言处理

--11.2命名实体识别技术

--11.3词向量表示

--11.4自然语言处理的挑战及应用

--章测试

10.3手写数字识别笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。