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元