TensorFlow进行MNIST数据集手写数字识别,保存模型并且进行外部手写图片测试

这篇具有很好参考价值的文章主要介绍了TensorFlow进行MNIST数据集手写数字识别,保存模型并且进行外部手写图片测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先,你已经配置好Anaconda3的环境,下载了TensorFlow模块,并且会使用jupyter了,那么接下来就是MNIST实验步骤。

数据集官网下载:MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burgeshttp://yann.lecun.com/exdb/mnist/

 TensorFlow进行MNIST数据集手写数字识别,保存模型并且进行外部手写图片测试

将上面四个全部下载,都是数据集,其中前两个是训练集,后两个是测试集

当然上面的数据集使用TensorFlow1.x要方便一点,本文章是使用TensorFlow2.x版本,使用npz格式数据集 

数据集官网下载:https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz

导入该导的包

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import datetime

这里可能有些小伙伴会提示模块找不到,没关系,在命令框执行下面命令安装模块

pip install matplotlib

接下来是读取数据集,有以下方法可以读取

第一种非常简单,直接使用tensorflow中的方法从官网下载数据集,这样就不用手动去官网下载数据集了,但是比较耗时间

mnist=tf.keras.datasets.mnist

#获取数据,训练集,测试集 60k训练,10K测试
#网络下载
(x_train,y_train),(x_test,y_test)=mnist.load_data()

第二种方法,使用下载好的本地npz文件,将下面的路径改成你自己的

#本地加载
dataset = np.load('/home/tensor/jupyter/MNIST_data2/mnist.npz')
# 获取训练集和测试集
x_train, y_train = dataset['x_train'], dataset['y_train']
x_test, y_test = dataset['x_test'], dataset['y_test']

下一步,原图片的大小为28x28,将图片转成32x32的大小效果更好

#首先是数据 INPUT 层,输入图像的尺寸统一归一化为32*32。
x_train= np.pad(x_train,((0,0),(2,2),(2,2)),'constant',constant_values=0) #28*28-》32*32
x_test= np.pad(x_test,((0,0),(2,2),(2,2)),'constant',constant_values=0) #28*28-》32*32
#print(x_train.shape,x_test.shape)

#数据集格式转换
# x_train=x_train.astype('float32')
# x_train=x_train.astype('float32')

#归一化,就是为了限定你的输入向量的最大值跟最小值不超过你的隐层跟输出层函数的限定范围。
x_train=x_train/255#归一化
x_test=x_test/255#归一化

x_train=x_train.reshape(x_train.shape[0],32,32,1)
x_test=x_test.reshape(x_test.shape[0],32,32,1)
print(x_train.shape,x_test.shape)

输出结果如下

TensorFlow进行MNIST数据集手写数字识别,保存模型并且进行外部手写图片测试

创建神经网络模型,这里我简单构建一个卷积神经网络模型

def LeNetModel():
#模型实例化,根据LeNet 的结构
    model=tf.keras.models.Sequential([
        tf.keras.layers.Conv2D(filters=6,kernel_size=(5,5),padding='valid',activation=tf.nn.relu,input_shape=(32,32,1)),
        tf.keras.layers.AveragePooling2D(pool_size=(2,2),strides=(2,2),padding='same'),
        tf.keras.layers.Conv2D(filters=16,kernel_size=(5,5),padding='valid',activation=tf.nn.relu,input_shape=(32,32,1)),
        tf.keras.layers.AveragePooling2D(pool_size=(2,2),strides=(2,2),padding='same'),
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(units=120,activation=tf.nn.relu),
        tf.keras.layers.Dense(units=84,activation=tf.nn.relu),
        tf.keras.layers.Dense(units=10,activation=tf.nn.softmax),
        ])
    return model

加载模型,并且输出摘要

model = LeNetModel()
model.summary() #输出摘要

输出如下:

TensorFlow进行MNIST数据集手写数字识别,保存模型并且进行外部手写图片测试  

定义超参数

num_epochs=1#训练次数
batch_size=60#每个批次喂多少张图片
lr=0.001#学习率

开始训练模型

#优化器
adam_optimizer=tf.keras.optimizers.Adam(lr)
     
model.compile(
        optimizer=adam_optimizer,
        loss=tf.keras.losses.sparse_categorical_crossentropy,
        metrics=['accuracy']
    )

start_time=datetime.datetime.now() #开始训练时间
     
model.fit(x=x_train,y=y_train,batch_size=batch_size,epochs=num_epochs)
end_time=datetime.datetime.now() #训练结束时间
time_cost=end_time-start_time #训练总时间
print('time_cost: ',time_cost)
model.save('leNet_model.h5') #保存模型
print(model.evaluate(x_test,y_test))
print("Finished!")

输出结果如下:

TensorFlow进行MNIST数据集手写数字识别,保存模型并且进行外部手写图片测试

接下来选择一张测试集图片或多张测试集图片进行测试

def pred_function(image,label):
    image_index=20
     
    # 预测
    pred=model.predict(image.reshape(1,32,32,1))
    print("label:",label,"predict result:",pred.argmax())
     
    # 显示
    plt.imshow(image.reshape(32,32))
    plt.savefig("predict_num.jpg")
    plt.show()
index = 100 #选择第100张图片进行测试
pred_function(x_test[index],y_test[index])

 结果如下:

TensorFlow进行MNIST数据集手写数字识别,保存模型并且进行外部手写图片测试

在结果中,label表示正确值,predict result表示模型测试的结果值

完成以上步骤,那么下面就是使用已保存的模型来预测我们自己手写的数字,将10.jpg改成你的手写图片路径

这里可能也会报错找不到cv2模块,执行以下命令安装模块:

pip install opencv-python

​​​​​​​

#模型使用
import tensorflow as tf
import matplotlib.pyplot as plt
import matplotlib as m
import numpy as np
import cv2
import os

mnist=tf.keras.datasets.mnist
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '0'
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '1'
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# np.set_printoptions(threshold=np.inf)
#加载模型
def digit_predict():
    model=tf.keras.models.load_model('leNet_model.h5')
     
    #图片预处理
    img=cv2.imread('10.jpg')
    print(img.shape)
    plt.imshow(img)
    plt.show()
     
    #灰度图
    img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    print(img.shape)
    plt.imshow(img,cmap='Greys')
    plt.show()
     
    #取反
    img=cv2.bitwise_not(img)
    plt.imshow(img,cmap='Greys')
    plt.show()
     
    print('二值化前:',img.shape)
    print('二值化前:',img)
    #纯黑 纯白 二值化
    img[img<=100]=0
    img[img>=140]=255
    plt.imshow(img,cmap='Greys')
    plt.show()
    print('二值化后:',img.shape)
    print('二值化后:',img)
     
    #尺寸
    img=cv2.resize(img,(32,32))
    print('尺寸:',img.shape)
    print('尺寸',img)
     
    #归一化
    img=img/255
    print('归一化:',img.shape)
    print('归一化:',img)#0和1组成

    #预测
    pred=model.predict(img.reshape(1,32,32,1))
    print('prediction Number: ',pred.argmax())
     
    #打印图片信息
    plt.imshow(img)
    plt.show()
     
digit_predict()

 下面是测试我自己手写数字的结果:

TensorFlow进行MNIST数据集手写数字识别,保存模型并且进行外部手写图片测试

我写的数字是8,预测结果也是8,效果还可以 ,那么本篇文章就到此结束啦,感谢大家的支持!文章来源地址https://www.toymoban.com/news/detail-474519.html

到了这里,关于TensorFlow进行MNIST数据集手写数字识别,保存模型并且进行外部手写图片测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Pytorch+torchvision】MNIST手写数字识别

    深度学习入门项目,含代码详细解析 在本文中,我们将在 PyTorch 中构建一个简单的卷积神经网络,并使用 MNIST数据集 训练它识别手写数字。 MNIST包含70,000张手写数字图像: 60,000张用于培训,10,000张用于测试。图像是 灰度(即通道数为1) , 28x28像素 ,并且居中的,以减少预

    2024年02月14日
    浏览(40)
  • 在树莓派上实现numpy的LSTM长短期记忆神经网络做图像分类,加载pytorch的模型参数,推理mnist手写数字识别

    这几天又在玩树莓派,先是搞了个物联网,又在尝试在树莓派上搞一些简单的神经网络,这次搞得是LSTM识别mnist手写数字识别 训练代码在电脑上,cpu就能训练,很快的: 然后需要自己在dataset里导出一些图片:我保存在了mnist_pi文件夹下,“_”后面的是标签,主要是在pc端导出

    2024年02月07日
    浏览(43)
  • FPGA实现mnist手写数字识别(软件部分)

    使用的环境:tf1.12,具体配置见here: 首先打开环境tf1.12,,再安装以下的包: opencv 在这里下载“linux-64/opencv3-3.1.0-py36_0.tar.bz2”,通过共享文件夹copy到download文件夹中,在文件夹下打开终端,输入以下命令进行安装: matplotlib(时刻注意是py36) Pillow(貌似不用了,上面已经安

    2023年04月15日
    浏览(79)
  • pytorch 入门 (三)案例一:mnist手写数字识别

    本文为🔗小白入门Pytorch内部限免文章 🍨 本文为🔗小白入门Pytorch中的学习记录博客 🍦 参考文章:【小白入门Pytorch】mnist手写数字识别 🍖 原作者:K同学啊 ​ 如果设备上支持GPU就使用GPU,否则使用CPU 使用dataset下载MNIST数据集,并划分好训练集与测试集 使用dataloader加载数

    2024年02月07日
    浏览(48)
  • 用PyTorch实现MNIST手写数字识别(最新,非常详细)

    本文基于 PyTorch 框架,采用 CNN卷积神经网络 实现 MNIST 手写数字识别,仅在 CPU 上运行。 已分别实现使用Linear纯线性层、CNN卷积神经网络、Inception网络、和Residual残差网络四种结构对MNIST数据集进行手写数字识别,并对其识别准确率进行比较分析。(另外三种还未发布) 看完

    2024年02月06日
    浏览(36)
  • (神经网络)MNIST手写体数字识别MATLAB完整代码

            在此次实验中,笔者针对 MNIST 数据集,利用卷积神经网络进行训练与测试,提 出了一系列的改进方法,并对这些改进的方法进行了逐一验证,比较了改进方法与浅层 神经网络的优劣。         首先,笔者对实验中所用的 MNIST 数据集进行了简单的介绍;接着,

    2024年02月03日
    浏览(45)
  • 深度学习:使用卷积神经网络CNN实现MNIST手写数字识别

    本项目基于pytorch构建了一个深度学习神经网络,网络包含卷积层、池化层、全连接层,通过此网络实现对MINST数据集手写数字的识别,通过本项目代码,从原理上理解手写数字识别的全过程,包括反向传播,梯度下降等。 卷积神经网络是一种多层、前馈型神经网络。从功能上

    2024年02月13日
    浏览(46)
  • 在树莓派上实现numpy的conv2d卷积神经网络做图像分类,加载pytorch的模型参数,推理mnist手写数字识别,并使用多进程加速

    这几天又在玩树莓派,先是搞了个物联网,又在尝试在树莓派上搞一些简单的神经网络,这次搞得是卷积识别mnist手写数字识别 训练代码在电脑上,cpu就能训练,很快的: 然后需要自己在dataset里导出一些图片:我保存在了mnist_pi文件夹下,“_”后面的是标签,主要是在pc端导

    2024年02月07日
    浏览(35)
  • [深度学习实战]基于PyTorch的深度学习实战(下)[Mnist手写数字图像识别]

    PyTorch——开源的Python机器学习库   首先感谢所有点开本文的朋友们!基于PyTorch的深度学习实战可能要告一段落了。本想着再写几篇关于 PyTorch神经网络深度学习 的文章来着,可无奈项目时间紧任务重,要求 短时间内出图并做好参数拟合 。所以只得转战 Matlab 编程,框架旧

    2024年02月16日
    浏览(55)
  • 机器学习第一周:用卷积神经网络实现Mnist手写数字识别(付基础知识解释)

    MNIST 数据集是一个手写数字识别数据集,包含了 60000 张训练图像和 10000 张测试图像,每张图像都是 28x28 像素的灰度图像。 在这个代码中,我们首先使用了 numpy 库中的 np.random.seed() 方法来设置随机种子,以确保结果可重复。 然后,我们使用了 Keras 中的 mnist.load_data() 方法来

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包