首页 > 区块链 > 区块链 > 用tensorflow2实现mnist手写数字识别
将tensorflow和numpy导入
from tensorflow import keras
from tensorflow.keras.layers import Flatten, Dense
import numpy as np
使用tensorflow内置的mnist数据集,返回训练集图片、训练集标签、测试集图片、测试集标签
(train_images, train_labels), (test_images, test_labels) = keras.datasets.mnist.load_data()
图片每个像素的数值都是在[0, 255]之间,所以归一化要除以255,数据要是浮点数,所以要添加一个小数点
train_images, test_images = train_images / 255.0, test_images / 255.0
搭建一个顺序模型,第一层先将数据展平,原始图片是28x28的灰度图,所以输入尺寸是(28,28),第二层节点数可以自己选择一个合适值,这里用128个节点,激活函数用relu,第三层有多少个种类就写多少,[0, 9]一共有10个数字,所以必须写10,激活函数用softmax
model = keras.Sequential([
Flatten(input_shape=(28, 28)),
Dense(128, activation='relu'),
Dense(10, activation='softmax')
])
优化器使用adam,损失函数使用交叉熵损失函数,评价指标用准确率
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['acc'])
将训练集输入模型进行训练,一共训练10次
model.fit(train_images, train_labels, epochs=10)
Epoch 1/101875/1875 [==============================] - 3s 2ms/step - loss: 0.2575 - acc: 0.9261Epoch 2/101875/1875 [==============================] - 3s 2ms/step - loss: 0.1135 - acc: 0.9661Epoch 3/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0776 - acc: 0.9764Epoch 4/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0589 - acc: 0.9818Epoch 5/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0452 - acc: 0.9861Epoch 6/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0371 - acc: 0.9890Epoch 7/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0279 - acc: 0.9912Epoch 8/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0226 - acc: 0.9932Epoch 9/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0203 - acc: 0.9935Epoch 10/101875/1875 [==============================] - 3s 2ms/step - loss: 0.0153 - acc: 0.9954
Out[6]:
<tensorflow.python.keras.callbacks.History at 0x24ecdc1c460>
用测试集去验证训练好的模型,日志等级设置为2
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print('Test acc:', test_acc)
313/313 - 0s - loss: 0.0845 - acc: 0.9791Test acc: 0.9790999889373779
将测试集中的第一张图片输入模型,看是哪个数字的概率最大,并输出真实值
predictions = model.predict(test_images)
print('预测值:', np.argmax(predictions[0]))
print('真实值:', test_labels[0])
预测值: 7真实值: 7
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69978904/viewspace-2733646/ ,如需转载,请注明出处,否则将追究法律责任。