用TensorFlow库实现的多层神经网络训练手写数字图像,训练得到的模型用于识别图像,但仅限于28*28大小的图片
import tensorflow as tf
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# print(tf.__version__)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
mnist=tf.keras.datasets.mnist
(train_x,train_y),(test_x,test_y)=mnist.load_data()
# x_train=train_x.reshape((60000,28*28))
# y_train=train_y.reshape((10000,28*28))
# 数据预处理:将像素值缩放到 [0,1] 范围内,并转换为浮点型
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.summary()
# 编译模型
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['sparse_categorical_accuracy'])
# 训练模型
model.fit(x_train,y_train,batch_size=64,epochs=5)
# 保存模型
model.evaluate(x_test,y_test,verbose=2)
# 保存模型
model.save("shoxie.keras")
# 加载模型
model=tf.keras.models.load_model("shoxie.keras")
# 可视化部分测试集样本和对应的预测结果
plt.axis("off")
for i in range(4):
plt.imshow(test_x[i], cmap="gray")
plt.show()
print(y_test[i])
input_data = np.expand_dims(x_test[i], axis=0) # 适配模型的维度
a=np.argmax(model.predict(input_data))
print(a)
结果输出:
938/938 [==============================] - 14s 12ms/step - loss: 0.3061 - sparse_categorical_accuracy: 0.9144
Epoch 2/5
938/938 [==============================] - 9s 10ms/step - loss: 0.1406 - sparse_categorical_accuracy: 0.9585
Epoch 3/5
938/938 [==============================] - 7s 8ms/step - loss: 0.0998 - sparse_categorical_accuracy: 0.9707
Epoch 4/5
938/938 [==============================] - 5s 5ms/step - loss: 0.0758 - sparse_categorical_accuracy: 0.9770
Epoch 5/5
938/938 [==============================] - 5s 5ms/step - loss: 0.0586 - sparse_categorical_accuracy: 0.9829
313/313 - 2s - loss: 0.0743 - sparse_categorical_accuracy: 0.9766 - 2s/epoch - 6ms/step
tf.Tensor(7, shape=(), dtype=int16)
1/1 [==============================] - 0s 222ms/step
7
tf.Tensor(2, shape=(), dtype=int16)
1/1 [==============================] - 0s 77ms/step
2
tf.Tensor(1, shape=(), dtype=int16)
1/1 [==============================] - 0s 52ms/step
1
tf.Tensor(0, shape=(), dtype=int16)
1/1 [==============================] - 0s 63ms/step
0