tensorflow实现MNIST手写数字识别演示

一、加载数据

import tensorflow as tf  #导入tensorflow库
mnist=tf.keras.datasets.mnist  
(x_train,y_train),(x_test,y_test)=mnist.load_data()  #加载数据

 如果无法加载数据的话,如类似出现如下图所示问题,则可以根据下载地址,将mnist.npz文件下载到本地。

然后通过以下代码加载本地数据文件

import tensorflow as tf
import numpy as np
def load_data(path):
    with np.load(path) as f:
        x_train, y_train = f['x_train'], f['y_train']
        x_test, y_test = f['x_test'], f['y_test']
        return (x_train, y_train), (x_test, y_test)

(x_train, y_train),(x_test, y_test) = load_data(path="../data/mnist.npz") #mnist的本地路径

x_train表示训练数据集,y_train表示训练数据集对应的结果;x_test表示测试数据集,y_test表示测试集对应的结果。加载完成后,可以通过以下代码来检查一下

x_train.shape

显示结果为:Out[30]: (60000, 28, 28);x_train表示训练数据,共60000条数据,每个数据是28*28的图像。可以使用matplotlib将其中的图像画出来。 如下代码:

import matplotlib.pyplot as plt
plt.imshow(x_train[1])

以上代码会显示出训练集中的第2张图片(序号从0开始),从图片可以看出是个手写的“0” 如下图所示:

再来看一下对应的训练集中的结果,应该是“0”,如下:

y_train[1]

输出结果:

二、预处理数据

         归一化处理。

用以下代码查看一下第二张图片的原始数据

x_train[1]

截取部分结果数据,如下图所示,数据表示每个像素的灰度值,在0-255之间。

将训练集和测试集数据都进行归一化处理,如下代码所示:

x_train=tf.keras.utils.normalize(x_train,axis=1)
x_test=tf.keras.utils.normalize(x_test,axis=1)

然后再使用  “x_train[1]”显示一下结果,如下图所示,相当于每个数据都除以了255

三、构建神经网络

下面的代码构建了一个输入层748,两个128神经元的隐藏,及10个神经元的输出层的神经网络。

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128,activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(128,activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(10,activation=tf.nn.softmax))
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])

四、训练神经网络

运行一下代码进行了5次迭代训练

model.fit(x_train,y_train,epochs=5) #训练模型

运行结果如下:

五、测试神经网络

以下一行代码使用测试集进行测试

val_loss,val_acc=model.evaluate(x_test,y_test) #测试,获取准确率

运行结果:

判断某些数据,还是从测试集中挑选图片来预测。如下代码:

predictions=model.predict([x_test[5:8]])#识别测试集中第6到8张图片
print(preditions)

以下是预测及格,接近1的数据对应的下标就是预测结果。 如第一个为“1”,第二个为“4”,第二个结果为“9”

可以使用matplotlib查看一下原始图片,检验一下结果

plt.imshow(x_test[6])

结果如下:

这样,我们就完成了神经网络识别手写数字的过程。:)

【腾讯云】云产品限时秒杀,爆款2核4G云服务器首年74元

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值