好
大家好
欢迎回来
这一节我们继续基于神经网络的
人工智能系统
我们来讨论一个实例
就是手写数字识别这么一个例子
手写数字识别是一个典型的
一个人工智能的一个算法
通过手写数字识别的实例
我们回头也可以看到神经网络的强大
也可以更好地理解他神经网络是如何运作的
那么在进行手写数字识别之前
我们需要准备一个数据集
数据集是充满了标签
就是已经人为标定好的一个训练集
这个数据集叫做MNIST
这是一个很著名的手写体数字识别的数据集
它分为两个
一个是训练集
一个是测试集
训练集包含了6万个样本以及对应的标签
那么测试集包含1万个样本和对应的标签
那么从学习机器学习和训练的角度上来说
训练集就类似于我们在学习当中
要用到各种的学习资料
做各种各样的习题来帮助我们提升学习能力
那么测试集是类似于考试的试卷
来检测我们学习的成绩
那么他们分别除了这个样本
所谓的样本就是手写体的图片
那么除了样本之外
还有每个样本都对应一个标签
这个标签就是由人为识别判定
然后标注上的一个数字
那么这个标签就可以认为是
习题和考试的一个标准答案
那么也就是说通过训练集的训练
那么如果用测试集在进行测试的时候
如果测试集的图片的输入都能
得到测试集的标签
相应的标签之后
就如果都能得到相应的标签的话
那么就算是考试通过
人工智能的程序就算是具有了手写数字识别的智能的能力了
我们来看看这个样本到底是什么样子的
我们知道只要是手写数字
那么显然是用数字图像来进行表示的
那么这个样本都是0到9
十个数字的不同的写法
那么它的样本的图片都是
28×28像素
就是横的是28列然后竖的是28行
这么一个正方形的图片上
然后手写的数字都出现在图片的中间
而且它有灰度
那么这样一共会有784个像素
784个数字来代表1个样本
那么其实对于一个样本图像来讲
我们大家看都看到了样本数据
然后一看其实我们根本不需要去做什么样的判断
去做什么样的规则去进行分析
其实人脑只要一看根据黑白的这种结构
就能很轻松的判断出数字是几
比如这个是跟一个一样都应该是3
那么如果写成这样
它就不是7
然后如果是这样的
他就应该就是数字3
或者说数字3有不同的写法
不管你怎么样的写
我们都能够认出来这些数字3
那么电脑看到的或者说
算法所看到的样本图像又是啥
当然他自己没有眼睛
他只能看到一系列的数值
刚才我们说这个图像是28像素乘以28像素
一共是784个像素
而每个像素它都有黑白之分
那么白的地方用一来表示
黑的地方用零来表示
那么还有一和零之间的小数就
代表灰色代表灰色
怎么样由784个这种数
0到1之间的这种数
784个就能够对应到3这样一个标签呢
这个就是我们神经网络算法
机器学习算法所要做的事情
那么所以我们就需要构造一个神经网络
它的一个算法的输入输出是这样的
首先我们要提一个向量的概念
什么是向量
就是把好多个数字按照顺序排成一组
那么这一些一组一组的数就叫做一个向量
然后那么一组数当中有多少个数字
那么就称之为向量的维数
那么我们这样我们每一个样本的图片
很显然它的输入这个图片都是一组784个数值
那么784个数值我们就称为一个784维的向量784
因为28×28等于784
所以我们的算法就应该输入的是784维向量
一个784维向量
然后输出标签
那么在每一个标签数据当中
我们会把这个数字表示成一个
只有在第N个维度数字标成一的
一个十维向量
就有十个数字
比如说是数字2
它的标签表示为001
然后后边跟着七个0
这个表示什么
就表示说我如果一个图像被标注为2的话
那么它是0的概率是零
它是1的概率是零
它是2的概率是一
它是百分之百的是二
那么百分之百的不是3456789
这是数字2的标签
当然数字5的标签
因为标签是由人标定的人
他是能够确实地去判断出这个数字应该是几
所以数字5的标签就是在五的对应位置上是一
就是概率是百分之百
那么其他的概率都是0
那么就是非常肯定这样的写法
它就是五而不是其他的
所以我们需要构建一个神经网络来
它有输入层
有输出层
那么输入层就是接收一个784维的向量
所以他有784个这种数值输入
然后经过中间层的计算
就是隐藏层
一系列的连神经元的连接
然后运算参数的权重的求和
然后一系列的这种夹层
然后最后他要输出一个十维向量
十维上量也都是每一维都是0到1之间
那么每一个维的值就代表神经网络判断样本图片
他到底是0还是1还是2还是3
它的概率是什么样的
当然有可能说我们这个图片输进去
我发现在零这概率是零
这个是概率是零
然后二概率是比如说他不是特别的确定的情况
可能会出现
比如说0.8
就是说80%的情况应该被解释为二
然后可能百分之十的情况
它会被解释为七
也有这样的可能
那这样如果我们得到一个十维的向量
我们当然就可以取最大的或者说
压倒性的那样的一个概率
然后就说我们识别了这么一个数字
比如说我们取80以上的概率二
那么好
我们就说我们的神经网络识别出这个图像
它就是二
那么我们先看看我们的成果
在介绍算法之前
其实对于我们的神经网络而言
经过一小段时间的训练
这也很短时间
只需要计算了2300多步
那么就神经网络它识别手写数字
的准确率就已经达到了93.13%
这就是一个识别率不断地提高的一个过程
这个就已经是相当好的一个结果了
我们后面再继续看神经网络是如何被构造如何运行的