前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TensorFlow系列专题(六):实战项目Mnist手写数据集识别

TensorFlow系列专题(六):实战项目Mnist手写数据集识别

作者头像
磐创AI
发布于 2018-12-10 07:42:47
发布于 2018-12-10 07:42:47
6780
举报

编辑 | 安可

出品 | 磐创AI技术团队

一. 导读

就像我们在学习一门编程语言时总喜欢把“Hello World!”作为入门的示例代码一样,MNIST手写数字识别问题就像是深度学习的“Hello World!”。通过这个例子,我们将了解如何将数据转化为神经网络所需要的数据格式,以及如何使用TensorFlow搭建简单的单层和多层的神经网络。

二. MNIST数据集

MNIST数据集可以从网站http://yann.lecun.com/exdb/mnist/上下载,需要下载的数据集总共有4个文件,其中“train-images-idx3-ubyte.gz”是训练集的图片,总共有60000张,“train-labels-idx1-ubyte.gz”是训练集图片对应的类标(0~9)。“t10k-images-idx3-ubyte.gz”是测试集的图片,总共有10000张,“t10k-labels-idx1-ubyte.gz”是测试集图片对应的类标(0~9)。TensorFlow的示例代码中已经对MNIST数据集的处理进行了封装,但是作为第一个程序,我们希望带着读者从数据处理开始做,数据处理在整个机器学习项目中是很关键的一个环节,因此有必要在第一个项目中就让读者体会到它的重要性。

我们将下载的压缩文件解压后会发现数据都是以二进制文件的形式存储的,以训练集的图像数据为例:

表1 训练集图像数据的文件格式

如表1所示,解压后的训练集图像数据“train-images-idx3-ubyte”文件,其前16个字节的内容是文件的基本信息,分别是magic number(又称为幻数,用来标记文件的格式)、图像样本的数量(60000)、每张图像的行数以及每张图像的列数。由于每张图像的大小是28*28,所以我们从编号0016的字节开始,每次读取28*28=784个字节,即读取了一张完整的图像。我们读取的每一个字节代表一个像素,取值范围是[0,255],像素值越接近0,颜色越接近白色,像素值越接近255,颜色越接近黑色。

训练集类标文件的格式如下:

表2 训练集类标数据的文件格式

如上表所示,训练集类标数据文件的前8个字节记录了文件的基本信息,包括magic number和类标项的数量(60000)。从编号0008的字节开始,每一个字节就是一个类标,类标的取值范围是[0,9],类标直接标明了对应的图像样本的真实数值。如图1所示,我们将部分数据进行了可视化。测试集的图像数据和类标数据的文件格式与训练集一样。

图1 训练集图像数据可视化效果

三. 数据处理

在开始实现神经网络之前,我们要先准备好数据。虽然MNIST数据集本身就已经处理过了,但是我们还是需要做一些封装以及简单的特征工程。我们定义一个MnistData类用来管理数据:

在“__init__”方法中初始化了“MnistData”类相关的一些参数,其中“train_image_path”和“train_label_path”分别是训练集数据和类标的文件路径,“test_image_path”和“test_label_path”分别是测试集数据和类标的文件路径。

接下来我们要实现“MnistData”类的另一个方法“get_data”,该方法实现了Mnist数据集的读取以及数据的预处理。

由于Mnist数据是以二进制文件的形式存储,所以我们需要用到struct模块来处理文件,uppack_from函数用来解包二进制文件,第42行代码中,参数“>IIII”指定读取16个字节的内容,这正好是文件的基本信息部分。其中“>”代表二进制文件是以大端法存储,“IIII”代表四个int类型的长度,这里一个int类型占4个字节。参数“image_file”是尧都区的文件,“image_index”是偏移量。如果要连续的读取文件内容,每读取一部分数据后就要增加相应的偏移量。

第51行代码中,我们对数据进行了归一化处理,关于归一化我们在第一章中有介绍。在后面两节实现神经网络模型的时候,读者可以尝试注释掉归一化的这行代码,比较一下做了归一化和不做归一化,模型的效果有什么差别。

最后,我们要实现一个“get_batch”方法。在训练模型的时候,我们通常会用训练集数据训练多个回合(epoch),每个回合都会用且只用一次训练集中的每一条数据。因为我们使用随机梯度下降的方式来更新参数,所以每个回合中,我们会把训练集数据分为多个批次(batch)送进模型中去训练,每次送进模型的数据量的大小为“batch_size”。因此,我们需要将数据按“batch_size”进行划分。

在第68行代码中,我们使用了“random”模块的“shuffle”方法对数据进行了“洗牌”,即打乱了数据原来的顺序,“shuffle”操作的目的是为了让各类样本数据尽可能混合在一起,从而在模型训练的过程中,各类样本都可以对模型的参数变化产生影响。不过需要记住的是,“shuffle”操作并不总是必须的,而且是否可以使用“shuffle”操作也要看具体的数据来定。

到这里我们已经实现了Mnist数据的读取和预处理,在后面两小节的内容里,我们会分别实现一个单层的神经网络和一个多层的前馈神经网络模型,实现Mnist手写数字的识别问题。

四. 单层隐藏层神经网络的实现

介绍完MNIST数据集之后,我们现在可以开始动手实现一个神经网络来解决手写数字识别的问题了,我们先从一个简单的两层(一层隐藏层)神经网络开始。

本小节所实现的单层神经网络结构如图2所示。每张图片的大小为[28*28],我们将其转为长度为784的向量作为网络的输入。隐藏层有10个神经元,在这个简单的神经网络中我们没有在隐藏层中使用激活函数。在隐藏层后面我们加了一个Softmax层,用来将隐藏层的输出直接转化为模型的预测结果。

图2 实现Mnist手写数字识别的两层神经网络结构

接下来我们实现具体的代码,首先导入上一小节中我们实现的数据处理的类以及TensorFlow的包:

创建一个Session会话,并定义好相关的变量:

“epochs”是我们想要训练的总轮数,每一轮都会使用训练集的所有数据去训练一遍模型。由于我们使用随机梯度下降方法更新参数,所以不会一次把所有的数据送进模型去训练,而是按批次训练,“batch_size”是我们定义的一个批次的数据量的大小,这里我们设定了100,那么每个“batch”就会送100个样本到模型中去训练,一轮训练的“batch”数等于总的训练集数量除以“batch_size”。“learning_rate”是我们定义的学习率,即模型参数更新的速率。

接下来我们定义模型的参数:

第16行代码定义了输入样本的placeholder,第18和第19行代码定义了该单层神经网络隐藏层的权重矩阵和偏置项。根据图3-16所示的网络结构,输入向量长度为784,隐藏层有10个神经元,因此我们定义权重矩阵的大小为784行10列,偏置项的向量长度为10。在第24行代码中,我们先将输入的样本数据转换为一维的向量,然后进行的运算,计算的结果再经由Softmax计算得到最终的预测结果。

定义完网络的参数后我们还需要定义损失函数和优化器:

第28行我们定义了交叉熵损失函数,关于交叉熵损失函数在本章第三小节中我们已经做了介绍,“”计算的是一个“batch”的训练样本数据的交叉熵,每个样本数据都有一个值,TensorFlow的“reduce_mean”方法将这个“batch”的数据的交叉熵求了平均值,作为这个“batch”最终的交叉熵损失值。

第29和30行代码中,我们定义了一个梯度下降优化器“GradientDescentOptimizer”,并设定了学习率为“learning_rate”以及优化目标为“cross_entropy”。

接下来我们还需要实现模型的评估:

“tf.equal()”方法用于比较两个矩阵或向量相应位置的元素是否相等,相等为“True”,不等为“False”。“tf.cast”用于将“True”和“False”转换为“1”和“0”,“tf.reduce_mean”对转换后的数据求平均值,该值即为模型在测试集上预测结果的准确率。最后,我们实现模型的训练和预测:

因为我们的“batch_size”设置为100,Mnist数据集的训练数据有60000条,因此我们训练600个“batch”正好是一轮。第50行代码中,我们训练完的模型对测试集数据进行了预测,并输出了预测的准确率,结果为0.9228。

五. 多层神经网络的实现

多层神经网络的实现也很简单,我们只需要在上一小节的代码基础上对网络的结构稍作修改即可,我们先来看一下这一小节里要实现的多层(两层隐藏层)神经网络的结构:

图3 实现Mnist手写数字识别的多层神经网络结构

如上图所示,这里我们增加了一层隐藏层,实现的是一个三层神经网络。与上一小节的两层神经网络不同的是,除了增加了一层隐藏层,在第一层隐藏层中我们还是用了“Sigmoid”激活函数。

实现三层神经网络我们只需要在上一小节的代码基础上对网络的参数做一些修改:

因为网络中有两层隐藏层,所以我们要为每一层隐藏层都定义一个权重矩阵和偏置项,我们设置第一层隐藏层的神经元数量为200,第二次隐藏层的神经元数量为10。这里我们初始化权重矩阵的时候没有像之前那样直接赋值为0,而是使用“tf.truncated_normal”函数为其赋初值,当然全都赋值为0也可以,不过需要训练较多轮,模型的参数才会慢慢接近较优的值。为参数初始化一个非零值,在网络层数较深,模型较复杂的时候,可以加快参数收敛的速度。

定义好模型参数之后,就可以实现网络的具体结构了:

这里具体的计算和上一节内容一样,不过因为有两层隐藏层,因此我们需要将第一层隐藏层的输出再作为第二层隐藏层的输入,并且第一层隐藏层使用了“Sigmoid”激活函数。第二层隐藏层的输出经过“Softmax”层计算后,直接输出预测的结果。最终在测试集上的准确率为0.9664。

到这里我们已经介绍完基本的前馈神经网络的内容了,这一章的内容是深度神经网络的基础,理解本章的内容对于后续内容的学习会很有帮助。从下一章开始,我们要正式开始深度神经网络的学习了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磐创AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
仿真软件哪个好?ABAQUS软件、CST软件介绍
在现代科技与工业领域,仿真软件已成为工程师和设计师的标配工作平台,其价值渗透于工程设计、工业制造、教育科研等关键领域。这类工具通过构建数字化模型模拟真实场景,助力用户实现设计优化、成本控制与教学创新—— 例如在航空航天领域,工程师可借助仿真软件预判飞行器气动性能;在汽车制造中,设计师能通过模拟碰撞测试优化车身结构,避免动辄百万的物理试验成本。
思茂信息
2025/06/18
650
仿真软件哪个好?ABAQUS软件、CST软件介绍
多物理场建模,实现高精度仿真计算 COMSOL Multiphysics 6.1
COMSOL Multiphysics 6.1是一款由COMSOL公司推出的多物理场建模和仿真计算软件,主要应用于机械、电气、热力学、化学等领域。该软件集成了多种高级的功能和工具,为用户提供了全方位的数字化设计解决方案。
用户10521990
2023/04/23
9360
多物理场建模,实现高精度仿真计算 COMSOL Multiphysics 6.1
物理场仿真研究 Comsol 软件安装包下载,Comsol 安装激活
在当今数字化时代,仿真分析越来越重要,尤其在科学研究、工程设计和教育教学领域。Comsol Multiphysics 软件是一款功能强大的多物理场仿真软件,它提供了丰富的物理建模和仿真工具,为用户提供了一种完整的科学研究和工作解决方案。本文将探讨 Comsol 软件的主要特色功能和使用方法,并提供一个具体的案例,演示如何使用 Comsol 软件进行仿真分析。
用户10436734
2023/04/20
4060
comsol快速入门教程
我自己参照官网的教程,写了个比较通俗易懂的入门教程,字多图多慎看(大三的时候写的)。
desperate633
2018/08/23
2.2K2
数字化仿真有新起点COMSOL Multiphysics6更强大实用性和可扩展性
COMSOL Multiphysics 6是一款由COMSOL公司开发的多物理场仿真软件,可用于模拟和优化工程、制造、科学研究和设计领域。该软件可以处理多种物理场,如热、电、磁、声、流体以及结构等物理场。COMSOL Multiphysics 6是一款高度灵活的仿真软件,使其可以适应广泛的领域和工程应用。
用户10480228
2023/04/07
5010
数字化仿真有新起点COMSOL Multiphysics6更强大实用性和可扩展性
Comsol Multiphysics (多物理模拟仿真软件)Comsol Multiphysics安装下载,绿色安装包
作为一款著名的物理建模和仿真软件,COMSOL Multiphysics全系列为工程师和科学家提供了全面的模拟和优化工具,支持多种物理现象、材料、能源和工程领域。下面将介绍COMSOL Multiphysics全系列的主要模块和功能。
网创青年阿金
2023/04/21
8700
Comsol Multiphysics (多物理模拟仿真软件)Comsol Multiphysics安装下载,绿色安装包
仿真工具 Abaqus 2022中文版下载安装教程+Abaqus全版本安装包
Abaqus 2022是世界上最受欢迎和广泛使用的有限元分析软件之一,它为数值分析和工程仿真带来前所未有的效率和精度。以下是Abaqus 2022的主要特点:
用户10521990
2023/04/25
7000
仿真工具 Abaqus 2022中文版下载安装教程+Abaqus全版本安装包
多物理场仿真软件COMSOL6.1最新激活版,COMSOL6.1下载安装激活
COMSOL是一款基于多物理场的仿真模拟软件,在全球各著名高校,COMSOL Multiphysic已经成为教授有限元方法以及多物理场耦合分析的标准工具,在全球500强企业中,COMSOL Multiphysic被视作提升核心竞争力,增强创新能力,加速研发的重要工具。COMSOL包含了结构力学模块、化学工程模块、热传递模块、CAD导入模块、地球科学模块、射频模块等。
用户10436734
2023/04/13
7650
高级数值仿真软件下载Multiphysics下载:COMSOL Multiphysics 6.1
COMSOL Multiphysics是一款多物理场仿真软件,它可以用于模拟和优化各种工程和科学应用,例如结构力学、电磁场、流体力学、化学反应、热传导等。下面是COMSOL Multiphysics 6.1的功能介绍和安装配置:
用户10519159
2023/04/25
6300
高级数值仿真软件下载Multiphysics下载:COMSOL Multiphysics 6.1
COMSOL Multiphysics 6.0高性能模拟计算软件,打造精准科学模型
COMSOL Multiphysics 6.0是一款用于多物理场建模和仿真计算的软件,该软件是由瑞典COMSOL公司开发,旨在帮助工程师、研究人员和科学家快速准确地解决复杂的科学和工程计算问题。COMSOL Multiphysics 6.0支持多种应用领域,包括机械力学、声学、电磁学、流体力学、化学反应等。
用户10313071
2023/04/19
8450
COMSOL Multiphysics 6.0高性能模拟计算软件,打造精准科学模型
comsol和ansys哪个好?数值仿真软件COMSOL中文版下载安装教程
首选COMSOL,界面化的建模,结构式的场分析流程,上手要远远优于ANSYS。comsol在学术界有广大的用户基础,而ANSYS在工业界的地位不可撼动。
用户10436734
2023/04/01
6K0
comsol和ansys哪个好?数值仿真软件COMSOL中文版下载安装教程
物理场仿真优化Comsol软件安装包下载,Comsol 6.1中文版下载安装
Comsol Multiphysics是一款由Comsol公司开发的专业有限元分析软件平台,旨在解决工程和科学领域中多物理场及其相互作用问题。其可广泛应用于电力、电子、机械、热力学等领域,能够进行多物理场的耦合仿真及优化。
用户10413399
2023/04/18
6010
Comsol 软件下载,计算机仿真软件Comsol 6.1激活版下载安装教程
Comsol Multiphysics是一款广泛应用于科学计算和工程领域的计算机仿真软件。该软件具有多物理场耦合、自适应网格划分等强大的功能,可支持二维和三维物理场模拟,并被广泛应用于电子、机械、化学、生物等领域的工程设计、优化和分析。由于Comsol软件具有较为复杂的模型设置和求解过程,而且是一款国际化软件,因此在中文市场的推广和应用仍然面临一些挑战。
用户10410624
2023/04/12
1.3K0
COMSOL 5.6:打造多物理场仿真新标杆+全版本安装包
COMSOL Multiphysics是一种先进的工程仿真软件,运用多物理场建模技术进行多学科领域的仿真和分析,可以对各种应用中的现象进行建模和求解。COMSOL使用基于有限元分析(FEA)的方法进行仿真计算,提供高度灵活的建模环境以及多种求解方式和后处理功能。COMSOL Multiphysics 5.6是该软件的最新版本,增加了许多新功能和改进,使其成为目前市场上最强大的工程仿真软件之一。
用户10480228
2023/04/16
5760
COMSOL 5.6:打造多物理场仿真新标杆+全版本安装包
有限元分析软件入门:哪款最易上手?
如果你是一位初学者,对于有限元分析(FEA)这个领域充满好奇,想要了解哪款软件易上手、功能强大,那么本文就是为你准备的。在这里,我们将引导你了解有限元分析的基本概念,并推荐几款适合初学者的优秀软件。
思茂信息
2025/06/13
1590
有限元分析软件入门:哪款最易上手?
comsol软件是干嘛的?多物理场仿真Comsol软件安装包下载
Comsol是一个基于有限元法的多物理场仿真软件。它是由Comsol公司开发的一种高级技术计算语言和交互式环境。在工程、物理、化学、生物和医学等领域中都有着广泛的应用。本文将探讨Comsol的独特竞争力和使用方法,并通过实例案例进行详细阐述。
用户10410624
2023/04/22
5360
多体动力学模拟仿真系统软件Adams,Adams软件中文版下载安装教程
ADAMS软件使用交互式图形环境和零件库、约束库、力库,创建完全参数化的机械系统几何模型,其求解器采用多刚体系统动力学理论中的拉格朗日方程方法,建立系统动力学方程,对虚拟机械系统进行静力学、运动学和动力学分析,输出位移、速度、加速度和反作用力曲线。ADAMS软件的仿真可用于预测机械系统的性能、运动范围、碰撞检测、峰值载荷以及计算有限元的输入载荷等。
用户10436734
2023/04/01
9560
多体动力学模拟仿真系统软件Adams,Adams软件中文版下载安装教程
HyperWorks 2022中文纯净绿色版
HyperWorks是一款功能强大的开放式架构仿真软件。Altair HyperWorks 2020中文版拥有先进的技术以及高性能、高效和创新的产品,为用户提供了设计、仿真和制造等服务。Altair HyperWorks软件支持电磁分析设计、材料建模制造、多物理场分析等功能,用户可以进行庞大且复杂的有限元模型创建操作。
用户10518048
2023/04/19
8440
HyperWorks 2022中文纯净绿色版
Comsol软件是干嘛的?Comsol多物理场仿真软件下载安装,功能介绍
在现代科学技术的发展中,模拟软件是不可或缺的一部分。理论与实践相结合,计算机仿真软件可以帮助我们更好地理解、预测、创新和优化各种物理现象和工程应用。本文将以Comsol Multiphysics® 为例,介绍其独特功能,并探讨其在实际应用中的价值。
优木软件
2023/05/06
8770
Python 科学计算与数据科学核心内容大纲
密码学人CipherHUB
2025/03/04
1653
Python 科学计算与数据科学核心内容大纲
推荐阅读
相关推荐
仿真软件哪个好?ABAQUS软件、CST软件介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档