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文件下载到本地。

tensorflow实现MNIST手写数字识别演示_第1张图片

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

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” 如下图所示:

tensorflow实现MNIST手写数字识别演示_第2张图片

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

y_train[1]

输出结果:

二、预处理数据

         归一化处理。

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

x_train[1]

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

tensorflow实现MNIST手写数字识别演示_第3张图片

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

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

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

tensorflow实现MNIST手写数字识别演示_第4张图片

三、构建神经网络

下面的代码构建了一个输入层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) #训练模型

运行结果如下:tensorflow实现MNIST手写数字识别演示_第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”

tensorflow实现MNIST手写数字识别演示_第6张图片

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

plt.imshow(x_test[6])

结果如下:

tensorflow实现MNIST手写数字识别演示_第7张图片

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

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

你可能感兴趣的:(Python,tensorflow,tensorflow,深度学习,机器学习)