1、张明 副教授 人工智能原理:基于Python语言和TensorFlow第五章:MNIST机器学习1.MNIST数据集简介2.MNIST数据下载3.softmax回归模型简介4.模型的训练与评估5.TensorFlow模型基本步骤6.构建softmax回归模型5.1:MNIST数据集简介1 MNIST数据集的概念2 MNIST数据集功能3 MNIST数据集组成1:MNIST数据集的概念当学习任意一门计算机语言进行编程时,首先接触的第一个程序就是打印“Hello World”。大家接触每一种编程语言都会有Hello World作为第一个编程任务,在人工智能机器学习领域也不例外。学习人工智能的初学者
2、,通过使用MNIST(Mixed National Institute of Standards and Technology database)手写数字识别任务的练习,来对人工智能TensorFlow进行最初步的应用。1:MNIST数据集的概念手写数字的MNIST数据集l 手写数字的MNIST数据集来自于美国国家标准与技术研究所(NIST),它是一个庞大的手写数字数据库,也是网上著名的公开数据集之一。l 包含了60,000个训练示例图片以及10,000个测试图片,数据集的图片分别代表了阿拉伯数字0阿拉伯数字9中的任意一个数字,图片只包含灰度值信息,规格尺寸为2828,所以每一张图片就是拥有7
3、84(2828)列的数据,数字位于整张图片的最中央位置,它是NIST提供的更大集合的一个子集。l 训练集(training set)由来自250个不同人手写的数字构成,其中50%是高中学生,50%来自人口普查局(the Census Bureau)的工作人员。测试集(test set)也是同样比例的手写数字数据。5.1:MNIST数据集简介1 MNIST数据集的概念2 MNIST数据集功能3 MNIST数据集组成2:MNIST数据集功能数据集有两个功能:(1)提供了大量的数据作为训练集和测试集,为一些兴趣爱好者和学习者提供了丰富的资源信息。(2)形成一个业界领域具有一定对比程度的项目,不同的研
4、究者使用了相同的数据集,从而可以更加方便地将结果进行对比,从而验证出哪种设计的程序识别率更高。MNIST是一个简单的计算机视觉数据集。它由图5-1所示的手写数字的图像组成。它还包括每个图像的标签,以便清楚地告诉我们出现的是什么数字。例如,上述图像的标签分别是5、2、5、3,所以,MNIST数据集中的每张数据图片都被事先标注了相应的阿拉伯数字。5.1:MNIST数据集简介1 MNIST数据集的概念2 MNIST数据集功能3 MNIST数据集组成3:MNIST数据集组成将MNIST数据集从官方网站下载完毕,下载下来的数据集图片被分成两部分:包含了60000张图片的训练数据集(mnist.train
5、)包含了10000张图片的测试数据集(mnist.test)其中,训练数据集用来提供给使用者进行模型的训练,以期训练出合适的模型;测试数据集用来提供给使用者对前一个阶段训练出的模型进行性能上的测试,在机器学习模型设计阶段,必须要设置一个单独的测试数据集用来评估模型的性能,这个测试数据集不用于训练。3:MNIST数据集组成MNIST数据单元分为两个部分:一张包含手写数字的图片 一个对应的标签我们把图片设为“xs”,把这些标签设为“ys”。训练数据集和测试数据集都含有xs和ys,可以将训练数据集的图片名称设定为mnist.train.images,将训练数据集的标签设定为mnist.train.l
6、abels。3:MNIST数据集组成每一张图片包含28像素28个像素点,可以用一个数字数组来表示这张图片,如图5-2所示。将这个数字数组展开成一个向量,长度是2828=784。数字间的顺序不重要,只要保持各个图片采用相同的方式展开。图5-23:MNIST数据集组成 MNIST数据集的图片就是在784维向量空间里面的点,并且拥有比较复杂的结构。在MNIST训练数据集中,mnist.train.images是一个形状为60000,784的张量,第一个维度数字用来索引图片,第二个维度数字用来索引每张图片中的像素点。在此张量里的每一个元素,都表示某张图片里的某个像素的强度值,值介于0和1之间,如图5-
7、3所示:图5-33:MNIST数据集组成 MNIST数据集的标签mnist.train.labels是介于0到9的数字,用来描述给定的训练图片里所表示的数字。标签数据用“one-hot vectors”的形式来表示,所谓的one-hot是指一位有效编码,即,我们使用n维度的向量来表示n个类别,这其中,每一个类别都会占据相对独立的一个位置,因此,一个one-hot向量即为除了某一特定位置的数字是1以外,其余各维度数字都是0。数字n将表示成一个只有在第n维度(从0开始)数字为1的10维向量。3:MNIST数据集组成因此,mnist.train.labels是一个60000,10的10维度数字矩阵,
8、如图5-4所示。图5-4第五章:MNIST机器学习1.MNIST数据集简介2.MNIST数据下载3.softmax回归模型简介4.模型的训练与评估5.TensorFlow模型基本步骤6.构建softmax回归模型5.2:MNIST数据下载1 数据的准备2 数据重构3 数据集对象1:数据的准备下载MNIST数据集,需要到它的官方网站进行下载,如图5-5所示:图5-51:数据的准备MNIST数据集是一个完全公开的数据集,任何的算法都可以拿来并应用MNIST数据集进行测试,如图5-6所示。图5-61:数据的准备 MNIST数据集官方网站上下载以下四种数据文件作为训练集与测试集:l Train-ima
9、ges-idx3-ubyte.gz:训练集图片55000张训练图片和5000张验证图片。l Train-labels-idx1-ubyte.gz:训练集图片对应的数字标签。l t10k-images-idx3-ubyte.gz:测试集图片-10000张测试图片。l t10k-labels-idx1-ubyte.gz:测试集图片对应的数字标签。1:数据的准备 通过Python源代码可以进行数据集的自动下载和安装,然后使用下列程序代码内容将之导入到项目里面,代码如下所示。1:数据的准备 接下来继续通过代码的具体内容来分析MNIST内容,代码如下所示。1:数据的准备 最后通过下列代码可以查看相关数据
10、集信息,代码如下所示。2:数据重构MNIST数据集中的四种数据文件没有使用标准的图片格式储存,需要使用extract_images()和extract_labels()函数进行手动解压。图片数据会被解压成二维的张量:image index,pixel index,其中每一项表示图片中特定像素的强度值,范围从0255缩放到到-0.50.5。其中image index代表数据集中图片的编号,从0到数据集的上限数值。pixel index代表图片中像素点的个数,从0到图片的像素上限数值。以train-开头的文件中包含60000个样本,其中55000个样本作为训练集,5000个作为验证集。2:数据重构
11、数据集中的灰度图片是28*28像素图片,它们的尺寸是784,即训练数据集内的每张图片都是由一个784维度的向量来表示的,训练集输出的张量格式是55000,784。数字标签数据被解压为一维的张量:image index,它定义了每个样本数值的类别分类。即训练集的标签的数据规模是55000。3:数据集对象底层的源代码将会执行下载、解压、重构图片和标签数据来组成以下三种数据集对象。l data_sets.train:55000组图片和标签,用于训练。l data_sets.validation:5000组图片和标签,用于迭代验证训练的准确性。l data_sets.test:10000组图片和标签,
12、用于最终测试训练的准确性。执行read_data_sets()函数将会返回一个DataSet实例,其中包含了上述的三种数据集。函数DataSet.next_batch()用于获取以batch_size为大小的一个包含了图片和标签的元祖,该元祖会被用于当前的TensorFlow运算Session中代码如下所示。images_feed,labels_feed=data_set.next_batch(FLAGS.batch_size)第五章:MNIST机器学习1.MNIST数据集简介2.MNIST数据下载3.softmax回归模型简介4.模型的训练与评估5.TensorFlow模型基本步骤6.构建s
13、oftmax回归模型5.3:softmax回归模型简介softmax回归模型是一个线性的多类分类模型,用来给不同的图片对象分配概率。softmax回归应用通常要先对图片像素值进行加权求和,从而得到一张给定图片属于某个特定数字类的证据(evidence)。如果这个像素能够有证据来证明这张图片不属于该类别,相应的权值就会用负数来进行标注;反之,如果这个像素拥有足够的证据来证明这张图片属于这个类别,那么相应的权值就会用正数来进行标注。5.3:softmax回归模型简介softmax回归应用通常要先对图片像素值进行加权求和,从而得到一张给定图片属于某个特定数字类的证据(evidence)。如果这个像素
14、能够有证据来证明这张图片不属于该类别,相应的权值就会用负数来进行标注;反之,如果这个像素拥有足够的证据来证明这张图片属于这个类别,那么相应的权值就会用正数来进行标注。如图5-7所示的图片显示了一个模型学习到的图片上每个像素对于特定数字类的权值。红色代表的权值为负数,蓝色代表的权值为正数。5.3:softmax回归模型简介对所有特征计算softmax,给定一张图片,它对于每一个数字的契合度可以被softmax函数转换成为一个概率值,使得所有类别输出的概率值和为1。softmax函数可以定义如下:5.3:softmax回归模型简介将等号右边的式子展开,可得到判定为第i类的概率:因此,可以将输入值作
15、为幂指数来进行求值运算,然后,再将这些结果值进行一定程度的正则化。5.3:softmax回归模型简介将softmax回归模型整个计算过程进行可视化,如图5-8所示。5.3:softmax回归模型简介对于输入的xs进行加权求和,再分别对其加上一个偏置项,最后再输入至softmax函数中,将上述内容的连线部分变为公式,可得出如图5-9所示的内容。5.3:softmax回归模型简介另外,还可将整个计算过程使用向量的方式来进行表示,即将元素相乘变为用矩阵乘法和向量相加。这样做既是一种有效的思考方式,也有助于提高计算效率,如图所示。第五章:MNIST机器学习1.MNIST数据集简介2.MNIST数据下载
16、3.softmax回归模型简介4.TensorFlow模型基本步骤5.构建softmax回归模型5.4:TensorFlow模型基本步骤使用TensorFlow实现简单的机器学习算法softmax回归,基本步骤分为以下四个部分。定义算法模型,代码如下所示。定义loss,指定优化器来优化loss,代码如下所示。5.4:TensorFlow模型基本步骤传入数据并进行迭代训练,代码如下所示。使用测试集或者验证集对准确率进行评测,代码如下所示。第五章:MNIST机器学习1.MNIST数据集简介2.MNIST数据下载3.softmax回归模型简介4.TensorFlow模型基本步骤5.构建softmax
17、回归模型5.5:构建softmax回归模型建立一个softmax回归模型,且具备单个线性层。通过为输入图像和目标输出类别创建节点,来完成计算图的构建工作,代码如下所示。代码里所出现的x和y并不是一个特定的值,它们仅仅代表着一个占位符,并且可以在TensorFlow运行某一个计算时根据该占位符的位置输入一个具体的数值。为模型定义权重W和偏置项b,并且可将它们作为额外的输入量进行数据输入,机器学习的应用过程中,模型参数一般是采用Variable来进行表示,代码如下所示。5.5:构建softmax回归模型变量首先会通过seesion进行初始化,然后,再将之应用在session中,代码如下所示。输入一
18、行代码内容的运行来实现回归模型,代码如下所示。5.5:构建softmax回归模型另外,可以为训练过程指定最小化误差用的损失函数:这个损失函数是目标类别和预测类别之间的交叉熵,代码如下所示。将使用梯度下降法来让交叉熵的值进行下降,下降的步长为0.03,代码如下所示。整个模型的训练可以通过将train_step放入循环语句中,通过反复运算来进行,代码如下所示。5.5:构建softmax回归模型对模型进行评估,要先找到预测正确的标签,因此最大值1所在的索引位置就是类别标签,代码如下所示。为了更加精确地进行分类的计算,需要将布尔值先转换为浮点数来表示对与错,最后再进行取平均值的计算,代码如下所示。5.5:构建softmax回归模型 最后,通过输入下列代码内容,我们即可完成预测数据的准确率计算,最终结果约为91%,代码如下所示。