step1 先导入一些必要的库
import numpy as np
import matplotlib.pyplot as plt
import tensorflow.python.keras as keras
from tensorflow.python.keras import layers
from tensorflow.keras.datasets import mnist
step2 加载数据 处理数据
(x_train, y_train), (x_test, y_test) = mnist.load_data()
#归一化
x_train = x_train / 255.0
x_test = x_test / 255.0
step3 搭建神经网络设置损失函数
model = keras.Sequential()
#Flatten层用来将输入“压平”,即把多维的输入一维化,
model.add(layers.Flatten(input_shape=(28, 28)))
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dropout(0.2)) #解决过拟合的问题
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
#mse均方误差 mae平均绝对误差 mape平均绝对百分比误差
model.fit(x_train, y_train, epochs=5)
res = model.evaluate(x_test, y_test)
# 返回损失和精度
print(model.metrics_names)
print(res)
step4 测试
# 随机选取图片测试
img_random = x_test[np.random.randint(0, len(x_test))]
#np.random.randint() 作为numpy库的一种方法,参数更丰富,相比于ranom.randint() 具备size参数 可指定outpud的元素的shape属性
plt.imshow(img_random)
plt.show()
#plt.imshow()函数负责对图像进行处理,并显示其格式,但是不能显示。 其后跟着plt.show()才能显示出来。
# 模型预测
img_random = (np.expand_dims(img_random, 0)) #扩展维度 0是代表的维度
prob = model.predict(img_random)
print(np.argmax(prob)) #取出最大值的索引
实验结果