深度学习day04-MNIST手写数字识别与模型使用

本文大概分为以下几个部分:手写数字识别原理(不强相关)、具体代码实现(算上import和空行一共50行代码不到)、训练出来的模型怎么使用。

目录

一、手写数字识别原理

二、具体代码实现

三、训练出来的模型怎么使用

一、手写数字识别原理

数字手写体识别由于其有限的类别(0~9共10个数字)成为了相对简单 的手写识别任务。DBRHD和MNIST是常用的两个数字手写识别数据集,我们这次使用的就是MNIST。

怎样识别数字呢?这是一个矩阵,每一个点的数值根据我们之前所说的0-255呈现出黑色到白不同的颜色,大家可以看出来这是一个 7 一个 2

深度学习day04-MNIST手写数字识别与模型使用

深度学习day04-MNIST手写数字识别与模型使用

你可以通过这个矩阵想象出黑白色上他究竟是什么样子吗(上图中每一个格子都是长方形,所以数字看着显宽,而实际中矩阵的长款都是相等的,所以上图中我们看数字,尽量忽略掉颜色)

它们真实的样子是这样的:

深度学习day04-MNIST手写数字识别与模型使用

我们可以实际对比一下是不是数字越小,颜色越黑,可以注意一下边边角角:

深度学习day04-MNIST手写数字识别与模型使用

而在我们的架构中:

深度学习day04-MNIST手写数字识别与模型使用

机器通过学习0-9的数字走向,最后得出这张图分别是0-9的概率是多大。老规矩,保持兴趣,以后我们再深入理解,现在我们开始动手了!

二、具体代码实现

先让我们看一看我们的数字:没有注释的地方都在前两天已经说过哦,不重复解释了

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras import datasets,layers,optimizers,losses

def 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这个数字

深度学习day04-MNIST手写数字识别与模型使用

看到这些数字了,接下来我们训练模型,在刚才的代码块后面:

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=(X_test,y_test))

准确率会逐步提升,当然也有可能下降一段时间

深度学习day04-MNIST手写数字识别与模型使用

三、训练出来的模型怎么使用

首先用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 格式(或较早的…深度学习day04-MNIST手写数字识别与模型使用https://blog.csdn.net/qq_52213943/article/details/123842076 ;

写在最后:思考与学习的过程可能会很难,也很慢,你在短时间内也不一定能想清楚,它可能需要花费你1个月、1年,甚至更长的时间…但是,你千万别放弃,它值得你用那么长的时间来思考,因为一旦想清楚,你的人生可能就会从此不同!

你有多长时间只顾低头赶路而忽略了路边的风景呢?

Original: https://blog.csdn.net/qq_52213943/article/details/123806148
Author: 昊昊该干饭了
Title: 深度学习day04-MNIST手写数字识别与模型使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/690101/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球