首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《Deep Learning with Python》第二章 2.1 神经网络的MNIST手写数字识别

第二章 神经网络的数学基础本章涉及的知识点:神经网络的MNIST手写数字识别(概览)张量(Tensor)和张量操作如何通过后向传播和梯度下降进行神经网络学习理解深度学习要求熟悉许多简单的数学概念:张量,张量操作,微分,梯度下降等等。本章目的是让读者对这些概念有个大体的认识。这里以一个实际的神经网络例子为开头,增加一些张量和梯度下降背景的了解。然后一点点的介绍新概念。记住,这些概念对理解后续章节的例子有帮助。读完本章后,你将对神经网络的工作原理有个直观的认识。神经网络的应用实践将在第三章详细讲解。2.1 神经网络的MNIST手写数字识别第一个具体的神经网络例子是,使用Keras(Python库)学习手写数字分类。如果对Keras或者类似的库没有什么经验,那么你可能无法立即搞懂该例子的所有步骤。可能你压根还没安装Keras,那也没关系咯。下一章会详细讲解该例子的每一步。所以,不用担心啦,准备开始了。解决的问题:识别灰度的手写数字图片(28 x 28)的数字(0到9)。本例使用机器学习经典的MNIST手写数字数据集,包含60000张训练图片饿10000张测试图片。它是NIST(National Institute of Standards and Technology)数据库的子集,建立于1980年代。你可以把“MNIST手写数字识别”看成是深度学习的“Hello World”,其可以验证算法的正确性。如果成为机器学习工作者,你将会在科学论文、博客等上不断地看到它。图2.1 是MNIST数据集的图片。

图2.1 MNIST手写数字图片类(class)和标签(label)的区别:在机器学习中,分类问题中的一个类别称之为类(class);数据点称为样本;类关联的具体样本称为标签(label)。你不需要立即重现本例,下一章3.3小结将会使用Keras。Keras会预加载MNIST数据集,得到的是四个Numpy数组:

和形成训练数据集。和形成测试数据集。图片由NUmpy数组组成,标签是一个数字数组,范围是0到9。图片和标签是一一对应的。下面看下训练数据:

接着是测试数据:接下来的流程是:首先,将训练数据(和)赋值给神经网络模型;然后神经网络学习图片及相应的标签;最后训练好的模型输入测试图片进行预测,并用验证预测值。下面构建神经网络:

神经网络的核心基础组件是层(layer),它是数据处理模块,可以认为是数据的过滤器(filter)。训练数据进入layer输出有用的形式,具体地说,layer抽取训练数据的学习特征。希望的是学习表征可以有效地解决问题。大部分深度学习包含多个layer形成链式,不断地进行数据提取。深度学习模型由一系列连续的数据过滤器(layer)提炼数据。本例中的神经网络由两个稠密层(Dense layer)序列组成,其中稠密层也称为全联接层(*fully connected layer)。第二层是个softmax layer,它将输出一个包含10个概率的数组(概率之和为1)。每个概率值表示当前的数字图片属于10个数字分类中某一个的概率。准备训练的步骤,下面是模型编译步骤(compilation step)中的三步:损失函数:度量神经网络模型在训练数据集上的性能,使得其向正确的方向迭代。优化器:基于训练数据和损失函数调整模型的机制。模型训练和测试的监控指标:本例只关注准确度(正确分类的图片比例)。后续两章会清晰的讲解损失函数和优化器的功能:

在模型训练之前进行数据预处理,将数据集按神经网络模型的要求重塑(即,改变大小形状),并归一化到[0, 1]区间。例如,前面训练图片存储为(60000, 28, 28)维德数组,数值类型为uint8,其大小为[0, 255]。这里将其转换成值为0到1的float32类型的(60000, 28 * 28) 维数据。

下面对标签进行编码,具体解释将在第三章给出:

Keras调用方法开始训练神经网络模型:

上面显示的两个数字是训练神经网络模型时的损失值和准确度。可以看到,很快在训练数据上达到0.989 (98.9%) 的准确度。下面在测试数据集上验证模型的性能:

测试数据集上的准确度为97.8%,比训练数据集上的小一点。训练数据集上的准确度和测试数据集上的差距意味着过拟合,机器学习模型在新数据集上的效果比训练数据集的差。过拟合将在第三章详细讲解。从上面可以看到:只用不到20行Python代码实现构建和训练一个神经网络模型来进行手写数字图片识别。下一小结,你将学习张量(,神经网络的数据存储对象),张量操作,梯度下降。

未完待续。。。Enjoy!

翻译本书系列的初衷是,觉得其中把深度学习讲解的通俗易懂。不光有实例,也包含作者多年实践对深度学习概念、原理的深度理解。最后说不重要的一点,François Chollet是Keras作者。声明本资料仅供个人学习交流、研究,禁止用于其他目的。如果喜欢,请购买英文原版。若发现以上文章有任何不妥,请联系我。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180106G0HZOF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券