首页 > 搜索 > 感知器算法数字识别,Python 深度学习:多层感知器实现手写数字识别

感知器算法数字识别,Python 深度学习:多层感知器实现手写数字识别

互联网 2020-10-25 18:45:24
在线算命,八字测算命理
学习 Keras 为主,内容比较简单

1 背景与目标

1.1 背景

Keras 是一个由纯 Python 编写而成的深度学习框架,并基于 Tensorflow、Theano 及 CNTK 后端。Keras 方便易用,能够迅速将 idea 转换为结果。

本文利用 Keras 构建多层感知器,进行0-9 的『手写数字识别』 ,旨在感受 Keras 库的友好与易用。

2.2 目标

使用 Keras 搭建深度学习模型,对 0-9 的手写数字图片进行有监督学习与识别。

数字取自开源的 mnist 数据库,总共包含:

60 000 张训练集图片10 000 张测试集图片

训练集与测试集数据均包含对应的标签。

60 000 张训练集图片2 数据预处理

mnist 数据库中的手写数字图片库是学习 Deep Learning 的基本素材,本项目虽然有图片格式的数据,但为方便操作,后续直接采用 .npz 格式的数据包。下载链接见此处。

3 代码实现

3.1 导入依赖库

Sequential: Keras 中的序贯模型,其特点是多个网络层线性堆叠Dense:全连接神经元层Dropout:神经元输入的断接率Activation:神经元层的激励函数SGD:优化器(optimizers)中的随机梯度下降法

3.2 导入数据集

a) 处理数据集

每一个手写数字图片为 28*28 像素的、经过灰度处理的图片,每个像素用 0-255 的 RGB 值表示x_train/y_train:训练集数据及其对应标签,共 60 000 组t_test/y_test:测试集数据及其标签,共 10 000 组reshape:将 (60000, 28, 28) 的 3 维数组转化为 (60000, 28*28) 2维数组,变换后每一行代表一张图片,共 28*28=784 个点,每个点范围为 [0, 255]astype('float32'):由于神经网络计算是需要用到大量线性运算,于是将数据设置为 32 位浮点数归一化数据集,将范围为 [0, 255] 的数据归一为 [0, 1]

b) 处理标签集

标签集中为范围 [0, 9] 的手写数字真实值,需要将其转化为二进制矩阵。

Y_train:训练集标签,大小为 60000*10。60000 表示图片数量,10 表示数字值,如 (0, 0, 0, 1, 0, 0, 0, 0, 0, 0) 中第四位为 1,表示图片真实值为 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)中的第四位,即手写数字为 3Y_train:同上,共 10000 组图片

3.3 建立神经网络模型

Sequential():选用序贯模型进行训练及识别batch_size = 128:每次梯度下降运算时包含的数据数量为 128epochs= 20:迭代 20 次Dense(500):每层 500 个神经元,输入层、隐藏层、输出层的连接为 Dense 全连接方式。input_shape=(28*28,):输入为 784 维向量。Dense(10):输出 10 维向量relu:隐藏层的激活函数softmax:输出层的激活函数

Relu 激活函数,其更易于学习优化:

\phi'(x)=\left\{\begin{matrix} 1 & x0\\ 0& x\leq0 \end{matrix}\right.

用 summary 进行总结,观察神经网络模型,该模型一共 898510 个参数:

3.4 编译模型

sgd:随机梯度下降法lr=0.01:学习率decay=1e-6:每次更新后的学习率衰减值momentum=0.9:动量参数nesterov=True:确定是否使用Nesterov动量

optimizer = sgd:优化器选为随机梯度下降法loss = 'categorical_crossentropy':损失函数选为多类的对数损失,适用于二值序列metrics = ['accuracy']:指标列表,用于性能评估,一般设置为 metrics=['accuracy']

3.5 训练模型

verbose = 1:显示训练日志X_train, Y_train:训练数据集validation_data = (X_test, Y_test):测试数据集loss/acc:训练集的损失值与准确值val_loss/val_acc:测试集的损失值与准确值

3.6 可视化结果

a) 将训练结果转化为 DataFrame

b) 可视化结果

上:训练集的准确率与损失值下:测试集的准确率与损失值4 性能评价

从上表与上图中可以发现:

训练集的准确率随迭代次数的增加而上升,在第 7 次后,准确率已经达到近 98%经过 20 次迭代,训练集的准确率达到 99.37%,已经非常完美了

事实上上表已经包含测试集应用模型的结果,但按照国际惯例,我们还是要用 evaluate 方法对模型进行评估:

可以发现,经过训练后的模型:

准确率为:98.25%

说明本项目建立的神经网络模型在手写数字的识别上,具有 98.25% 的识别准确率。

5 总结反思

to be continued……

免责声明:非本网注明原创的信息,皆为程序自动获取互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件12小时内删除。

相关阅读

一周热门

查看更多