基于TensorFlow框架的手写数字识别
摘要:手写识别是一种应用在手机和平板电脑输入中的一种常见输入方式,目前国内已经有很多开源的机器学习平台可以方便的进行构建神经网络对手写数字进行识别。如Google公司的TensorFlow和百度的PaddlePaddle(飞浆)。本文通过搭建CNN卷积神经网络,利用python编程技术,使用TensorFlow框架并结合MNIST标准数据集对模型进行训练于评估,从而达到对手写数字的识别
关键词:CNN卷积神经网络;TensorFlow;手写数字识别;数据集
一.Tensorflow框架与MNIST数据集
1.validation框架Tensorflow框架
Google公司的Tensorflow深度学习框架是目前较为常用的深度学习平台。Tensorflow框架的推出使人工智能的开发更加便捷。Tensorflow支持多种CPU和GPU计算,可以很快的将神经网络计算部署到个人计算机和各类服务器上,也可支持多种模型训练。例如卷积神经网络和递归神经网络。在机器学习领域中使用的最常见的编程语言是python,python这一编程语言
本身就集成了很多跟机器学习相关的第三方库,此外还有很多支持机器学习使用的库也可以很方便的导入到python中。利用pip install tensorflow命令就可以将Tensorflow集成到python中。
1.MNIST数据集
MNIST是一个非常有名的手写体数字识别数据集(手写数字灰度图像数据集),在很多资料中,这个数据集都会被用作深度学习的入门样例。 
MNIST数据集是由0-9的数字图像构成的。训练图像有6万张,测试图像有1万张。MNIST数据集是MNIST数据集的一个子集,它包含了60000张图片作为训练数据,10000张图片作为测试数据。由250个不同的人手写而成。 
每一张图片都有对应的标签数字,训练图像一共有60000张,供研究人员训练出合适的模型。测试图像一共有10000张,供研究人员测试训练的模型的性能。 
这些手写图片都是28*28像素,灰度图像。
但是它们并不是作为图像文件存储的,而是28*28的二维数组中。数组中的每个元素对应数组中的每个像素。 
二.CNN卷积神经网络
针对于CNN,其实呢,抛去那些晦涩难懂的概念,细说CNN的构成就那么几层罢了,卷积层、激活函数、池化层、全连接层。我们这里打算仅搭建四层,进行这个让我们的电脑成为一个“小超人”这个神圣的任务。第一层:卷积层 、第二层:卷积层、 第三层:全连接层、 第四层:输出层。那么我们建立这些层的原因是什么呢?这要从卷积神经网络的原理说起,即对图片的特征进行提取,我们现在第二个卷积层窗口大小为5×5,对32张图像求卷积产生64个特征图,参数个数是5×5×32×64=51200个权值加上64个偏置。
池化计算是在卷积层中进行的,使用2×2,步长为2的池化窗口做池化计算,池化后得到64张7×7的特征图。特征图长宽都变成了之前的1/2。
第三层是全连接层,为池化层的结果做池化计算,池化后得到特征图。
第四层是输出层,输出预测值。
特征图数量越多说明卷积网络提取的特征数量越多,如果特征图数量设置得太少容易出现欠拟合,如果特征图数量设置得太多容易出现过拟合,所以需要设置为合适的数值。
三.实例构建过程
python3.9是目前python版本中较为稳定的版本,Tensorflow2.9.1是Tensorflow目前的最新版。所以本实例采用python3.9+Tensorflow2.9.1。操作系统为win10家庭版,计算机CPU为8核的AMD Ryzen 5 4500U。实例构建分为四个步骤:第一步在python库中导入Tensorflow及相关工具包,第二步加载MNIST数据集并对数据集进行预处理,第三步构建神经网络模型训练数据,第四步对预预测的图片进行预测。
1.在python库中导入Tensorflow
在python3.9中建立工程并通过import tensorflow将Tensorflow导入到python中,为了方便多维度的矩阵运算及可视化的结果,通过import numpy和import matplotlib将数学库和绘图库也一并导入到python中。但是因为numpy不是python的标准库,所以需要使用指令pip install numpy对其进行安装。
1.加载MNIST数据集
在Tensorflow2.9.1下可以直接利用Keras模块加载MNIST数据集,考虑到MNIST数据集加载速度较慢,本实例将下载好的MNIST数据集保存在电脑中加载,并对MNIST数据集6000
0张训练图片和10000张测试图片进行简单的处理预处理为Tensorflow中的张量(Tensor)。利用Tensorflow中的convert_to_tensor可以较为方便的将python中的数据转换为Tensorflow中的张量(Tensor)。
1.构建神经网络模型训练数据
1.引入数据集
这里呢,我们引入数据集是一个非常简单的事情,只需要将keras.datasets下的mnist导入即可。
mnist = tf.ist
(train_data,train_target), (test_data, test_target) = mnist.load_data()
3.2.数据预处理
这里我们要使用TensorFlow来进行后续操作,所以需先对数据进行预处理。3.2.1 改变数据维度
train_data = shape(-1, 28, 28, 1)
test_data = shape(-1, 28, 28, 1)
在TensorFlow中,在做卷积的时候需要把数据变成4维的格式,这4个维度分别是:数据数量,图片高度,图片宽度,图片通道数
3.2.2 归一化(有助于提升训练速度)
train_data = train_data/255.0
test_data = test_data/255.0
3.2.3 独热编码
train_target=tf._categorical(train_target,num_classes=10)
test_target=tf._categorical(test_target,num_classes=10)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。