这里将使用代码来表示,由于某些原因自己的电脑无法识别单个手写数字集图片
这只是本人的一个学习记录…
Code:
# 定义库 查看tensorflow 和 keras版本
import tensorflow as tf
tf.__version__, tf.keras.__version__
# 定义其他相关库
import numpy as np
import matplotlib.pyplot as plt
# use the GPU
gpus = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(gpus[0], True)
# 加载 mnist 数据集
mnist = tf.keras.datasets.mnist
(train_x, train_y), (test_x, test_y) = mnist.load_data()
# 定义隐含层 tf,keras.layers.Flatten() [将图片转化为一个长条]
X_train = train_x.reshape((60000, 28*28))
X_test = test_x.reshape((10000, 28*28))
# 数据归一化, 因为图片的像素值在 0~255 之间
X_train, X_test = tf.cast(train_x/255.0, tf.float32), tf.cast(test_x/255.0, tf.float32)
y_train,y_test = tf.cast(train_y, tf.int16), tf.cast(test_y, tf.int16)
#构建神经网络
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape = (28, 28)))
model.add(tf.keras.layers.Dense(128, activation = "relu"))
model.add(tf.keras.layers.Dense(10, activation = "softmax"))
#配置训练方法
model.compile(optimizer = 'adam',
loss = 'sparse_categorical_crossentropy',
metrics = ['sparse_categorical_accuracy'])
# 训练模型
model.fit(X_train, y_train, batch_size = 64, epochs = 5, validation_split=0.2)
# 评估模型
model.evaluate(X_test, y_test, verbose=2)
# 挑选一个图片,并得到图片中的数字
plt.axis("off")
plt.imshow(test_x[0],cmap="gray")
plt.show()
y_test[0]
#识别该图片
# model.predict([[X_test[0]]])
# np.argmax(model.predict([[X_test[0]]]))
# 使用模型测试一组连续的数据
for i in range (4):
plt.subplot(1, 4, i + 1)
plt.axis('off')
plt.imshow(test_x[i], cmap = "gray")
plt.title(test_y[i])
plt.show()
model.predict(X_test[0:4])
np.argmax(model.predict(X_test[0:4]), axis = 1)
在最后的连续数据测试中可以得到如下结果
接下来是训练模型对这几张图片的识别结果
可见 arry([7, 2, 0, 1])
与图片中数字的顺序完全相同,因此识别成功