手写体数字识别(Python+TensorFlow)

16 篇文章 1 订阅
订阅专栏

注意:该作者博客已迁移至https://buxianshan.xyz

先看结果

在MNIST数据集10000张测试图片上的正确率
在这里插入图片描述
测试手写数字图片(20张)
原图
在这里插入图片描述
测试结果
在这里插入图片描述

源文件下载:

  • CSDN下载 https://download.csdn.net/download/qq_43479622/11227413(需要5C币)
  • 没有C币的也可以到GitHub下载 https://github.com/BuXianShan/Handwritten-Numeral-Recognition

声明:

本文大部分程序参考《TensorFlow实战Google深度学习框架》,很适合深度学习入门的书籍。

解压文件打开后如图

在这里插入图片描述
__pycache__文件夹是Python自动生成的,不用管它,想了解它可以参考 https://blog.csdn.net/yitiaodashu/article/details/79023987

MNIST_model文件夹保存了已经训练30000次的模型

picture文件夹存放的是自己手写数字的图片

需要的安装的Python模块

  • tensorflow
  • opencv-python
  • pillow

(这里我建议全部使用pip安装,用国内镜像下载特别快,如果以后计算量大需要使用gpu版本的tensorflow再重新安装gpu版本的。opencv-python和pillow都是关于图像处理的,只有app.py文件使用到了。)

关于MNIST数据集

MNIST是深度学习的经典入门demo,他是由6万张训练图片和1万张测试图片构成的,每张图片都是28*28的灰度图,像素取值为0~1。这些图片是采集的不同的人手写从0到9的数字。TensorFlow将这个数据集和相关操作封装到了库中,每一张图片是一个长度为784的一维数组。

from tensorflow.examples.tutorials.mnist import input_data

便会自动下载封装好的数据集。

mnist_inference.py文件定义了前向传播过程以及神经网络的参数

三层全连接网络结构,通过加入隐藏层实现了多层网络结构。

mnist_train.py定义了神经网络的训练过程

运行mnist_train.py文件便会开始训练模型,MNIST_model文件已经有训练好的模型,你也可以删掉或修改然后重新训练。

mnist_eval.py文件定义了测试过程

运行mnist_eval.py文件就是计算在mnist数据集上测试1万张图片的正确率。
在这里插入图片描述

app.py文件实现了测试自己手写数字的图片

在picture文件夹保存要测试的图片,运行app.py文件即可输出测试结果

以上都是我测试过的文件,可以使用,下面记录了我遇到的困难

我遇到的困难

困难1:不知道模型训练好了怎么测试自己手写的图片

跟着书上开始做的时候,mnist_inference.py、mnist_train.py 和 mnist_eval.py这三个文件已经可以实现训练模型和测试正确率。但是由于这三个文件使用的mnist数据集,我还不知道数据集到底长什么样子,也不知道模型训练好了怎么测试自己手写的图片。就是感觉好像做了一个很厉害的东西,但是不知道怎么用的感觉。
然后把模型搭建的过程重新梳理了一遍,才知道从何下手。输入节点是长度为784的数组,所以得把我的图片转化为长度是784的数组,才能输入到模型里,才能得到结果。
代码请看app.py里的image_prepare()函数,通过使用图像处理库PIL把图片转化为灰度图并且修改尺寸为28*28,然后转化为数组

困难2:测试自己手写图片的正确率太低

在mnist测试数据集上的正确率有98.52%,而测试自己手写数字的正确率几乎为0,大部分数字都被识别成8。
在这里插入图片描述
通过不断测试我总结了以下几个原因:

  1. mnist数据集图片是黑底白字,而我们平时都是白底黑字,所以要对测试图片灰度反转
    修改过后测试如图
    在这里插入图片描述
    已经可以识别几个数字了,但还是很多被识别成了8。原因是自己拍的图片有很多噪点,直接输入给模型就因为噪点太多,被误认为是8。
  2. 二值化来降噪
    原图在这里插入图片描述
    使用opencv二值化图像cv2.threshold(img,127,255,cv2.THRESH_BINARY)
    在这里插入图片描述
    虽然还有少量噪点,但已经有很好的识别效果了。(还可以再调整阈值)
    测试结果
    在这里插入图片描述
    基本上识别了所有数字。
    (测试自己写的数字时很可能因为输入图像没处理好导致识别率太低。)

我使用的版本
python3.7
tensorflow 1.13.1
运行时可能有很多warning,不影响运行结果

总结

本文只大致介绍了使用方法,神经网络的相关基础知识还要多多了解。这里使用的是基于全连接层网络结构的神经网络,对数字识别已经有了不错的效果,但使用卷积神经网络还可以提高正确率(大约99.2%),比如LeNet-5模型。

tensorflow手写数字识别python源码案例
12-28
tensorflow手写数字识别python源码官网案例,带详细注释,适合刚初学tensorflowmnist数据集训练识别, 相关链接: 手写数字识别 ----在已经训练好的数据上根据28*28的图片获取识别概率(基于Tensorflow,Python) https://www.cnblogs.com/motao9527/p/10190987.html
Python实战:手写数字识别
oandy0的博客
04-12 827
手写数字识别是机器学习中的一个经典问题,它涉及到图像处理、特征提取和模式识别等多个领域。在这个项目中,我们将使用Python和一些开源库来构建一个简单的神经网络,用于识别手写数字
神经网络手写数字识别
最新发布
需要远程指导仿真实验、代码有问题的,请后台私信或者关注公众号
04-25 625
神经网络手写数字识别
Python实现基于VGG16迁移学习实现手写数字识别
毕业作品网站
08-02 2981
由于 VGG16 并不是针对该问题而设计的,而是一个基于 ImageNET 上 1400 万张 1000 类图片而预训练的模型,在我的工作中只添加了必要的全连接层等,就实现了 95% 以上准确率的分类效果,可以说是较为满意的。
pytorch 手写数字识别+测试自己的图片+线性网络
ak49的博客
10-11 1147
pytorch 手写数字识别 线性网络 可以使用自己的图片测试
手写数字识别_MNIST数据集
kui9702的博客
12-14 1万+
前言 MNIST数据集由250个不同的人手写而成,总共有7000张手写数据集。其中训练集有6000张,测试集有1000张。每张图片大小为28x28,或者说是由28x28个像素组成。这章打算用一个简单的模型进行手写字符识别MNIST 下载MNIST数据集的方式有很多,可以去MNIST官网下载,也可以用函数api下载 官网下载网页为:http://yann.lecun.com/exdb/mnist/,复制链接打开之后可以在网页中看到以下信息,下图圈起来的就是数据集。 本文采用的是通过pytorch
深度学习入门必看-手写数字识别
Python,数据分析,机器学习,深度学习
11-15 1万+
前言 目前深度学习框架paddlepaddle、tensorflow、pytorch比较,结合网上大神的总结,pytorch更好学,社区也大,教程较多,莫名其妙的错误比较少。它基于动态图,可以按照正常人的思路玩,API较稳定。 paddlepaddle的话同时支持动态图和静态图,但是社区还在建设中,版本迭代更新快。不过可以嫖百度的云计算服务,值得一试。而且配套的预训练模型和可视化等等开发工具也在上线中,蛮好用的。 tensorflow是出了名新手劝退框架,因为文档比较反萌新,版本兼容性较差(我曾在嫉妒
手写数字识别
热门推荐
frcbob的博客
12-10 1万+
手写数字识别 任务输入:一系列手写数字图片,其中每张图片都是28x28的像素矩阵。 任务输出:经过了大小归一化和居中处理,输出对应的0~9的数字标签。 MNIST数据集 MNIST数据集深度学习领域标准,易用的成熟数据集。 由6万个训练样本和1万个测试样本组成,每个样本都是一张28*28像素的灰度手写数字图片。 data包含三个元素的列表:train_set、val_set、 test_set,包括50 000条训练样本、10 000条验证样本、10 000条测试样本。每个样本包含手写
python+tensorflow2.x+opencv搭建真实场景下的手写数字识别
weixin_44268185的博客
02-26 2206
python+tensorflow2.x+opencv搭建真实场景下的手写数字识别初步成果第一步训练手写数字模型引入需要的库文件读取数据看一下数据什么样数据归一化搭建模型固化模型训练模型看一下我们的训练成果用模型预测一个数据保存模型opencv计算机视觉部分先引入必须的库文件必要的全局变量写一个函数用来查看图片读取图片改变图片大小灰度化处理边缘检测闭运算在图片外围加上边框获取边框最后一步,识别加标...
手写数字测试图片.zip
09-03
手写数字0-9图片,用于深度学习入门实践项目mnist,训练完模型之后,可用训练的模型预测本图片,尺寸为28*28,灰度图片,有0-910个数字
使用OpenCV-python实现手写数字识别
凯哥大数据——刘凯的博客
10-06 9354
文章目录安装mahotas库智能提取阈值一、加载必要的库和一些基本函数二、定义hog算子来描述图片的特征三、根据已有数字类别标注的数据集来训练模型四、利用训练好的模型进行数字识别数据集下载和完整代码附录 安装mahotas库智能提取阈值 默认的conda环境是没有mahotas的,需要自己手动安装mahotas,注意不要使用pip install这种方式,可能会导致电脑死机!!! conda co...
python实现kNN算法识别手写体数字的示例代码
12-25
1。总体概要 kNN算法已经在上一篇博客中说明。对于要处理手写体数字,需要处理的点主要包括: (1)图片的预处理:将png,jpg等格式的图片转换成文本数据,本博客的思想是,利用图片的rgb16进制编码(255,255,255)为白色,(0,0,0)为黑色,获取图片大小后,逐个像素进行判断分析,当此像素为空白时,在文本数据中使用0来替换,反之使用1来替换。 from PIL import Image '''将图片转换成文档,使用0,1分别替代空白和数字''' pic = Image.open('/Users/wangxingfan/Desktop/1.png') path = open(
数字手写体识别数据集
10-17
mnist手写体数据集,已经亲自验证,可以直接应用到算法中。
手写体数字识别(Python+TensorFlow)-机器学习代码类资源(txt为微云链接)
07-16
使用Python+TensorFlow,全连接的神经网络,基于MNIST数据集数据集包含60000张训练图片,10000张测试图片。MNIST_model文件夹是已经训练30000次的模型,也可以自己再训练。app.py文件可以测试自己的图片。
代码下载:Python+TensorFlow+PyQt实现手写体数字图片识别+GUI界面+画板数字识别
11-03
博客:https://blog.csdn.net/weixin_45775701/article/details/109446515
深度学习+tensorflow+手写数字识别-mnist
10-23
深度学习+tensorflow+手写体数字识别-mnist:这里使用的是基于全连接层网络结构的神经网络,对数字识别已经有了不错的效果,但使用卷积神经网络还可以提高正确率(约为99.2%),比如LeNet-5模型。环境:python3.7 、...
(附代码)详解使用Pytorch和预训练数据(pretrained)进行迁移学习(Transfer Learning)
一起学习 | Study Together
02-21 8531
迁移学习代码,Pytorch,使用Python的真实项目中利用转移学习的所有知识.使用pytorch和预训练数据进行迁移学习——附案例详解.Deep Learning for Everyone: Master the Powerful Art of Transfer Learning using PyTorch
手写数字识别:CNN-AlexNet
weixin_46443403的博客
02-14 3999
手写数字识别,CNN,AlexNet,神经网络
python实现手写体数字图片识别+gui界面+画板数字识别
12-15
Python实现手写体数字图片识别GUI界面和画板数字识别可以通过使用一些流行的Python库和工具来实现。首先,可以使用OpenCV库来处理图像,包括读取手写体数字图片和画板上的数字。然后,可以使用TensorFlow或PyTorch等深度学习框架来训练和加载预训练的神经网络模型,用于识别手写体数字图片。 对于GUI界面的实现,可以使用Tkinter或PyQt等库来创建用户界面,包括一个可以上传手写体数字图片的按钮和一个可以用鼠标或触控笔在画板上绘制数字的区域。通过与OpenCV和深度学习模型的集成,可以实现在图像上传或画板绘制完毕后,识别出所绘制的数字并显示在界面上。 在代码实现上,可以创建一个Python脚本或者Jupyter Notebook来组织整个项目。该脚本可以包括图像处理的部分、深度学习模型的加载和推理部分,以及和GUI界面的交互逻辑。在图像处理和深度学习模型部分,可以使用Python的PIL库来处理图像,以及相应的深度学习库来加载模型和进行推理。对于GUI界面的实现,可以使用Tkinter或PyQt等库来创建按钮、画板和显示结果的窗口。 最终,通过这样的Python实现,用户可以方便地上传手写体数字图片或在画板上绘制数字,并得到识别结果。同时,这样的项目也可以作为一个学习和实践深度学习模型和GUI界面开发的练手项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • C++输入未知长度的数组 66497
  • 手写体数字识别(Python+TensorFlow) 12224
  • VSCode配置Python环境 11731
  • 爬虫基础:HTTP基本原理 6832
  • 用Python实现微信定时发送消息 6528

分类专栏

  • 数据库
  • 练习题 3篇
  • python 16篇
  • 工具 7篇
  • C/C++ 7篇
  • C# 3篇
  • Linux 1篇
  • 计算机网络 2篇

最新评论

  • C++输入未知长度的数组

    ZYB_BO: 注意空格

  • 手写体数字识别(Python+TensorFlow)

    对方正在输入.....131: 老哥,tensorflow没有exzmple库了

  • 脚本启动和关闭 jupyter notebok 并隐藏命令行

    Clearea: 我win10成功了表情包。不过我之前配置过Jupyter的默认启动目录,就是那个默认打开的起始位置,不知和这个有没有关联。

  • C++输入未知长度的数组

    Kiwi Star: 想问一下为什么输入的数字在输出时被当作一整个数字输出了啊

  • C++输入未知长度的数组

    ironman5202: 回车过后需要继续输入数组呢

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • python使用虚拟环境
  • oracle和mysql一些基本sql语句的区别
  • 为什么requests库有时中文会乱码
2020年5篇
2019年37篇

目录

目录

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源合作社名怎么起卷门厂起名字给芭比娃娃起名鲈鳗邓氏取名起名大全什么面膜补水效果好起店名大全男孩打分测免费三峡原文及翻译什么是三线表sitelink死寂剧情国学起名男宝三九起名网漆黑的射干ebank.spdb.com.cnpsp汉字输入法胡氏起名字大全女孩中国起重机厂 排名正宗笔画输入法下载撇点uptool斗罗大陆电视剧免费完整版陕西国土资源厅厅长小起名字好铁山寺重庆电视台直播郝姓氏起名用成语给男孩起名称广播软件明末1625淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化