基于深度学习的MNIST手写数字数据集识别(准确率99%,附代码)

Mnist数据集可以算是学习深度学习最常用到的了。这个数据集包含70000张手写数字图片,分别是60000张训练图片和10000张测试图片,训练集由来自250个不同人手写的数字构成,一般来自高中生,一半来自工作人员,测试集(testset)也是同样比例的手写数字数据,并且保证了测试集和训练集的作者不同。每个图片都是2828个像素点,数据集会把一张图片的数据转成一个2828=784的一维向量存储起来。

里面的图片数据如下所示,每张图是0-9的手写数字黑底白字的图片,存储时,黑色用0表示,白色用0-1的浮点数表示。

打开后会有四个文件:

训练数据集:train-images-idx3-ubyte.gz

训练数据集标签:train-labels-idx1-ubyte.gz

测试数据集:t10k-images-idx3-ubyte.gz

测试数据集标签:t10k-labels-idx1-ubyte.gz

将这四个文件下载后放置到需要用的文件夹下即可不要解压!下载后是什么就怎么放!

文件夹下运行下面的代码,即可自动检测数据集是否存在,若没有会自动进行下载,下载后在这一路径:

#下载数据集fromtorchvisionimportdatasets,transformstrain_set=datasets.MNIST("data",train=True,download=True,transform=transforms.ToTensor(),)test_set=datasets.MNIST("data",train=False,download=True,transform=transforms.ToTensor(),)

参数解释:

datasets.MNIST:是Pytorch的内置函数torchvision.datasets.MNIST,可以导入数据集

train=True:读入的数据作为训练集

transform:读入我们自己定义的数据预处理操作

download=True:当我们的根目录(root)下没有数据集时,便自动下载

如果这时候我们通过联网自动下载方式download我们的数据后,它的文件路径是以下形式:原文件夹/data/MNIST/raw

test:自己写的测试图片

main:主函数

model:训练的模型参数,会自动生成

data:数据集文件夹

14轮左右,模型识别准确率达到99%以上

1)导入必要的包及预处理,本人学习时做了较多注释,且用的是下载好的文件,如果是自己的请更改对应的文件目录哦。importosimportmatplotlib.pyplotaspltimporttorchfromPILimportImagefromtorchimportnnfromtorch.nnimportConv2d,Linear,ReLUfromtorch.nnimportMaxPool2dfromtorchvisionimporttransformsfromtorchvision.datasetsimportMNISTfromtorch.utils.dataimportDataLoader#Dataset:创建数据集的函数;__init__:初始化数据内容和标签#__geyitem:获取数据内容和标签#__len__:获取数据集大小#daataloader:数据加载类,接受来自dataset已经加载好的数据集#torchbision:图形库,包含预训练模型,加载数据的函数、图片变换,裁剪、旋转等#torchtext:处理文本的工具包,将不同类型的额文件转换为datasets#预处理:将两个步骤整合在一起transform=transforms.Compose({transforms.ToTensor(),#将灰度图片像素值(0~255)转为Tensor(0~1),方便后续处理#transforms.Normalize((0.1307,),(0.3081)),#归一化,均值0,方差1;mean:各通道的均值std:各通道的标准差inplace:是否原地操作})

3)构建模型

成功运行的话请给个免费的赞吧!(调试不易)

4)模型训练

每次训练完成后会自动保存参数到pkl模型中,如果路径中有Pkl文件,下次运行会自动加载上一次的模型参数,在这个基础上继续训练,第一次运行时没有模型参数,结束后会自动生成。#模型训练deftrain():#index=0forindex,datainenumerate(train_loader):#获取训练数据以及对应标签#fordataintrain_loader:input,target=data#input为输入数据,target为标签y_predict=model(input)#模型预测loss=criterion(y_predict,target)optimizer.zero_grad()#梯度清零loss.backward()#loss值反向传播optimizer.step()#更新参数#index+=1ifindex%100==0:#每一百次保存一次模型,打印损失torch.save(model.state_dict(),"./model/model.pkl")#保存模型torch.save(optimizer.state_dict(),"./model/optimizer.pkl")print("训练次数为:{},损失值为:{}".format(index,loss.item()))

5)加载模型

6)模型测试#模型测试deftest():correct=0#正确预测的个数total=0#总数withtorch.no_grad():#测试不用计算梯度fordataintest_loader:input,target=dataoutput=model(input)#output输出10个预测取值,概率最大的为预测数probability,predict=torch.max(input=output.data,dim=1)#返回一个元祖,第一个为最大概率值,第二个为最大概率值的下标#loss=criterion(output,target)total+=target.size(0)#target是形状为(batch_size,1)的矩阵,使用size(0)取出该批的大小correct+=(predict==target).sum().item()#predict和target均为(batch_size,1)的矩阵,sum求出相等的个数print("测试准确率为:%.6f"%(correct/total))

6)自己手写数字图片识别函数(可选用)

7)MNIST中的数据识别测试数据

8)测试自己的手写数字图片(可选)

将所有代码按顺序放到编辑器中,安装好对应的包,就可以顺利运行啦。

如果成功运行了请给我一个免费的赞吧,这对我真的很重要!!!

THE END
1.统一身份认证平台统一身份认证系统全新改版!为你提供方便、快捷的统一身份认证使用体验。 用户使用自己的统一认证账户即可访问校内各级网站和系统、图书数据库资源,登录VPN访问校内资源。 初次登录请先激活账号。 用户可以在校园融合门户个人头像右上角点击控制面板进入个人设置,维护统一身份认证系统个人信息。 https://mail.nuist.edu.cn/
2.MNIST项目使用教程name='mnist', version='0.1.0', description='MNIST Digit Recognition Project', author='datapythonista', packages=find_packages(), install_requires=[ 'numpy==1.21.2', 'pandas==1.3.3', 'scikit-learn==1.0.1', 'tensorflow==2.6.0', https://blog.csdn.net/gitblog_00257/article/details/141739480
3.mnist·GitHubTopics·GitHubA MNIST-like fashion product database. Benchmark benchmarkmachine-learningcomputer-visiondeep-learningfashiondatasetganmnistconvolutional-neural-networkszalandofashion-mnist UpdatedJun 13, 2022 Python hwalsuklee/tensorflow-generative-model-collections https://github.com/topics/mnist
4.jiayuneu/mnistnpumnistnpuOpenI张佳预 f4fe05f185 Merge pull request 'add read-imagenet' (#2) from OpenIOSSG/MNIST_Example:master into master 11 个月前 changeorl a5e1884ca3 add read-imagenet 11 个月前 张佳预 9fc1cad0eb Merge pull request 'master' (#1) from OpenIOSSG/MNIST_Example:master into master 11 个月前https://openi.pcl.ac.cn/jiayu_neu/mnist_npu/commits/branch/master
5.包含手写数字的MNIST数据库包含手写数字的 MNIST 数据库有一个 60,000 示例的训练集,还有一个 10,000 示例的测试集。 这些数字已在大小方面规范化,在固定大小的图像中居中。 备注 Microsoft 按“原样”提供 Azure 开放数据集。 Microsoft 对数据集的使用不提供任何担保(明示或暗示)、保证或条件。 在当地法律允许的范围内,Microsoft 对使用https://docs.microsoft.com/zh-cn/azure/open-datasets/dataset-mnist
6.详解MNIST数据集腾讯云开发者社区MNIST数据集已经是一个被”嚼烂”了的数据集, 很多教程都会对它”下手”, 几乎成为一个 “典范”. 不过有些人可能对它还不是很了解, 下面来介绍一下. MNIST 数据集可在http://yann.lecun.com/exdb/mnist/获取, 它包含了四个部分: Training set images: train-images-idx3-ubyte.gz (9.9 MB, 解压后 https://cloud.tencent.com/developer/article/2054449
7.MNIST数据集:手写数字识别的基准数据集MNIST数据集是一个在手写体数字识别领域中广泛使用的数据集。它包含了60,000个训练样本和10,000个测试样本,每个样本都是一个28x28像素的灰度图片,代表了一个手写数字(0-9)。本文旨在为IT程序员提供有关MNIST数据集的全面了解和使用方法。 什么是MNIST数据集? https://www.imooc.com/article/338875
8.深入学习MNIST数据集MNIST是一个入门级的计算机视觉数据集,只有12M左右,包含各种尺寸是28*28的手写数字图片,它有60000个训练样本集和10000个测试样本集。此数据集是以二进制存储的。 下载MNIST数据集 使用tensorflow自带工具进行下载 >>> from tensorflow.contrib.learn.python.learn.datasets.mnist import read_data_sets https://zhuanlan.zhihu.com/p/367066452
9.MNIST数据集简介51CTO博客大多数示例使用手写数字的MNIST数据集。 该数据集包含60,000个用于培训的示例和10,000个用于测试的示例。 这些数字已经标准化,并以固定大小的图像(28x28像素)为中心,其值为0到1.为简单起见,每个图像都被展平并转换为784个特征(28 * 28)的一维 numpy数组)。 https://blog.51cto.com/u_13393656/3099432
10.Python实战之MNIST手写数字识别详解pythonMNIST数据集是机器学习领域中非常经典的一个数据集,由60000个训练样本和10000个测试样本组成,每个样本都是一张28 * 28像素的灰度手写数字图片。本文主要介绍了通过 MNIST实现手写数字识别,需要的可以参考一下+ 目录 数据集介绍 MNIST数据集是机器学习领域中非常经典的一个数据集,由60000个训练样本和10000个测试样本https://www.jb51.net/article/233763.htm