tensorflow2实现手写数字识别

举报
Nikolas 发表于 2020/10/25 23:59:20 2020/10/25
【摘要】 深度学习看起来是很高深,但是想要入门却并不难。本文用tensorflow2实现一个最简单的模型,目的是为了让大家对深度学习搭建模型的流程有一个最基本的认识。

1.导入依赖包

将tensorflow和numpy导入

from tensorflow import keras
from tensorflow.keras.layers import Flatten, Dense
import numpy as np

2.加载数据集

使用tensorflow内置的mnist数据集,返回训练集图片、训练集标签、测试集图片、测试集标签

(train_images, train_labels), (test_images, test_labels) = keras.datasets.mnist.load_data()

3.对图片进行归一化

图片每个像素的数值都是在[0, 255]之间,所以归一化要除以255,数据要是浮点数,所以要添加一个小数点

train_images, test_images = train_images / 255.0, test_images / 255.0

4.定义模型

搭建一个顺序模型,第一层先将数据展平,原始图片是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')
])

5.指定优化器、损失函数、评价指标

优化器使用adam,损失函数使用交叉熵损失函数,评价指标用准确率

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['acc'])

6.训练模型

将训练集输入模型进行训练,一共训练10次

model.fit(train_images, train_labels, epochs=10)
Epoch 1/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.2575 - acc: 0.9261
Epoch 2/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.1135 - acc: 0.9661
Epoch 3/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0776 - acc: 0.9764
Epoch 4/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0589 - acc: 0.9818
Epoch 5/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0452 - acc: 0.9861
Epoch 6/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0371 - acc: 0.9890
Epoch 7/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0279 - acc: 0.9912
Epoch 8/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0226 - acc: 0.9932
Epoch 9/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0203 - acc: 0.9935
Epoch 10/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0153 - acc: 0.9954
<tensorflow.python.keras.callbacks.History at 0x24ecdc1c460>

7.用测试集验证模型效果

用测试集去验证训练好的模型,日志等级设置为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.9791
Test acc: 0.9790999889373779

8.将图片输入模型,返回预测结果

将测试集中的第一张图片输入模型,看是哪个数字的概率最大,并输出真实值

predictions = model.predict(test_images)
print('预测值:', np.argmax(predictions[0]))
print('真实值:', test_labels[0])
预测值: 7
真实值: 7
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。