本文大概分为以下几个部分:手写数字识别原理(不强相关)、具体代码实现(算上import和空行一共50行代码不到)、训练出来的模型怎么使用。
目录
一、手写数字识别原理
二、具体代码实现
三、训练出来的模型怎么使用
一、手写数字识别原理 数字手写体识别由于其有限的类别(0~9共10个数字)成为了相对简单 的手写识别任务。DBRHD和MNIST是常用的两个数字手写识别数据集,我们这次使用的就是MNIST。
怎样识别数字呢?这是一个矩阵,每一个点的数值根据我们之前所说的0-255呈现出黑色到白不同的颜色,大家可以看出来这是一个 7 一个 2
文章图片
文章图片
你可以通过这个矩阵想象出黑白色上他究竟是什么样子吗(上图中每一个格子都是长方形,所以数字看着显宽,而实际中矩阵的长款都是相等的,所以上图中我们看数字,尽量忽略掉颜色)
它们真实的样子是这样的:
文章图片
我们可以实际对比一下是不是数字越小,颜色越黑,可以注意一下边边角角:
文章图片
文章图片
而在我们的架构中:
文章图片
机器通过学习0-9的数字走向,最后得出这张图分别是0-9的概率是多大。老规矩,保持兴趣,以后我们再深入理解,现在我们开始动手了!
二、具体代码实现 先让我们看一看我们的数字:没有注释的地方都在前两天已经说过哦,不重复解释了
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras import datasets,layers,optimizers,lossesdef show_pic(X_train,Y_train):
pic_arr = X_train[:9,:,:]
pic_ind = Y_train[:9]
plt.figure()
for i in range(9):
plt.subplot(3, 3, i+1)
plt.imshow(pic_arr[i,:,:],cmap='gray')
plt.title(str(pic_ind[i]))
plt.show()//获取Keras自带的mnist数据集分为训练集((X_train,Y_train))和验证集((X_test,Y_test))
(X_train,Y_train),(X_test,Y_test) = datasets.mnist.load_data()show_pic(X_train,Y_train)
show_pic(X_test,Y_test)
其中X对应的是矩阵,也就是图像;而Y对应的则是图像的数字。比如一张图像 X 是数字9的矩阵,则对应的 Y 就是9这个数字
文章图片
看到这些数字了,接下来我们训练模型,在刚才的代码块后面:
X_train = np.reshape(X_train,[60000,28*28])
X_test = np.reshape(X_test,[10000,28*28])y_train = title_Y(Y_train,10)
y_test = title_Y(Y_test,10)//建立一个模型,里面是三层全连接,格式都是固定的,最后一次的数字由于我有0-9十个选项,所以写10
model = tf.keras.Sequential([
layers.Dense(700, activation='relu'),
layers.Dense(350,activation='relu'),
layers.Dense(10,activation='softmax')
])//定义损失和优化函数,不懂原理的可以直接这么写,之前也有介绍
opt = optimizers.SGD(learning_rate=0.001)
loss = losses.CategoricalCrossentropy()//创建这个模型
model.build(input_shape=[None,784])
//定义优化,损失,准确率
model.compile(optimizer=opt,loss=loss,metrics=['accuracy'])
//训练次数,执行到这一句,就开始训练了
model.fit(x=X_train,y=y_train,batch_size=100,epochs=25,validation_data=https://www.it610.com/article/(X_test,y_test))
准确率会逐步提升,当然也有可能下降一段时间
文章图片
三、训练出来的模型怎么使用 首先用save()将我们的模型全部保存下来,.h5是专属后缀
model.save('model.h5')
之后我们可以使用这个命令导入我们曾经保存的模型:
model = tf.keras.models.load_model('model.h5')
这样就可以对单独一张图进行预测了,当然,具体是保存整个模型,还是只保存权重,后来发现也是有不一样的,各有优势,更多的模型保存问题和选择会在下一篇详细介绍。
更新:
深度学习TensorFlow---保存和加载 Keras 模型_昊昊该干饭了的博客-CSDN博客目录Keras简介保存整个模型保存模型的权重Keras简介Keras 模型由多个组件组成:架构或配置,它指定模型包含的层及其连接方式。一组权重值(即“模型的状态”)。优化器(通过编译模型来定义)。一组损失和指标(通过编译模型或通过调用add_loss()或add_metric()来定义)。我们可以通过 Keras API 将这些片段一次性保存到磁盘,或仅选择性地保存其中一些片段:将所有内容以 TensorFlow SavedModel 格式(或较早的...https://blog.csdn.net/qq_52213943/article/details/123842076
写在最后:思考与学习的过程可能会很难,也很慢,你在短时间内也不一定能想清楚,它可能需要花费你1个月、1年,甚至更长的时间...但是,你千万别放弃,它值得你用那么长的时间来思考,因为一旦想清楚,你的人生可能就会从此不同!
你有多长时间只顾低头赶路而忽略了路边的风景呢?
【深度学习|深度学习day04-MNIST手写数字识别与模型使用】
推荐阅读
- 数据介绍|Landsat系列卫星介绍
- 5 分钟,教你用 Docker 部署一个 Python 应用!
- 教你用 Python 快速批量转换 HEIC 文件
- 神经网络|学习笔记----周志华《机器学习》第五章(神经网络)(二)
- 机器学习|吃瓜笔记《机器学习》周志华——第五章 神经网络
- 人工智能|特斯拉新四化研究(电动化和自动化上一路领先,下一步是共享化)
- 机器学习|周志华《机器学习》笔记(五)——第5章 神经网络
- 自动驾驶|全面解析特斯拉自动驾驶体系
- 机器学习(周志华)|《机器学习》(周志华) 第3章 线性模型 学习心得 笔记