一文实现0~9手写数字识别系统
上一篇《机器学习分类算法之k-近邻代码分析》中,大家后台留言有以下错误:
在此,统一给大家答复:这是由于Python 3与Python 2之间的割裂以及向下不兼容造成的,iteritems是Python2里的写法,Python3中使用items。出错的童鞋使用的环境是Python3,大家可以查看下自己的Python版本。
后续的代码分享,均使用Python3,如果有Python2和Python3不一致的地方,我会做好标注。
修改后正确的运行结果,如下:
本节分享的是Peter机器学习实战中2.3示例手写识别系统。怎样一步步构建并使用k-近邻分类器进行数字0~9的手写识别。
这个图应该不陌生,是经典的识别数字的卷积网络LeNet-5。通过简单的图像处理(处理的都是小patchs,比如28*28或32*32、图像归一化等操作,将像素数据送入卷积网络训练。
Peter机器学习从数据机器学习角度给了另一种实现手写识别的思路,作为识别数字的入门实现思路之一,还是不错的。也能很好的说明k-近邻分类器的用途。
按照掌握的k-近邻的实现路线,实现手写数字识别大致需要以下过程:
(1)收集数据:图像数据转化成文本数据(虽然文本格式存储图像不能利用内存空间,但是为了方便理解,还是转成文本格式,本文中图像大小采用32*32)
(2)准备数据:编写classify0()函数,将图像格式转换为分类器使用的list格式。另,数据需要分为两部分,一部分作为测试样本,另一部分作为非测试样本,非测试样本是已经完成分类的数据。
(3)分析数据:检查数据,确保数据符合要求。
(4)测试算法:用已知分类的数据和classify0()去测试分类结果与已知分类是否一致
(5)使用算法:从图像中提取数字,并完成数字识别。(此过程《机器学习实战》中没有)
收集数据:将图像转换为测试向
为了方便,直接使用2.3示例中提供的数据,数据情况如下:
数据目录
图像数据:如0,2
为了直接使用上一篇中的createDataSet()和classify0(),将每个32*32的二进制图像矩阵转化为1*1024向量。
需要定义函数img2vector,原理比较简单,循环读出32行,写入数字。下面以trainingDigits里的0_0.txt为例:
测试算法
该过程使用classify0()计算某个图像数据向量与一堆向量哪个向量最相近,便将最相近向量对应的标签作为该图像数据的标签。
算法测试原理:用trainingDigits里的数据做验证,该数据集里的命名方式"数字_该数字第几个实例.txt"。用classify0()测试trainingDigits下每一个数据是否正确。因为要遍历整个数据集文件目录,所以需要引入listdir函数(from os import listdir)。代码由三部分构成,分别是获取trainingDigits的文件目录内容、从文件名中解析出分类数字、classify0()识别出每个文件的分类数字。
代码实现
结果
PS:该过程又出现了Python3和Python2的不同之处:print。
python3中print是一个内置函数,有多个参数,而python2中print是一个语法结构;Python2打印时可以不加括号:print 'hello world', Python3则需要加括号 print("hello world")。
使用算法(该部分书本中没有)
写了一个简单的函数useClassify(filename),供大家参考,下面是函数实现:
小编自己从一副二值化的32*32的图像(数字0)转化为文本格式的数据,拿来做算法使用测试,测试结果如下:
总结:
数据量大了后,算法的执行效率不高,一是因为占用存储空间,另一个是已知分类数据多的情况下,耗时也会增长。再有k-近邻的原理导致没办法使用表征数据更好的特征。
理财快讯:如果你没能赶上打新股,那就参与打新债吧!
欢迎转发到朋友圈或分享给好友
一文实现0~9手写数字识别系统相关推荐
- 【毕业设计_课程设计】手写数字识别系统的设计实现(源码+论文)
文章目录 0 项目说明 1 系统概述 1.1 系统实现环境 2 研究方法 2.1 图像预处理阶段 2.2 特征提取阶段 2.3 数字识别阶段 3 研究结论 4 论文概览 5 项目工程 0 项目说明 手 ...
- k-近邻算法实现手写数字识别系统
k-近邻算法实现手写数字识别系统 一.实验介绍 1.1 实验内容 本实验将会从电影题材分类的例子入手,详细讲述k-近邻算法的原理.在这之后,我们将会使用该算法实现手写数字识别系统. 1.2 课程来源 ...
- 课程设计(毕业设计)—基于机器学习KNN算法手写数字识别系统—计算机专业课程设计(毕业设计)
机器学习KNN算法手写数字识别系统 下载本文手写数字识别系统完整的代码和课设报告的链接(或者可以联系博主koukou(壹壹23七2五六98),获取源码和报告):https://download.csd ...
- MATLAB实现数字识别系统,基于人工神经网络的MATLAB手写数字识别系统
<基于人工神经网络的MATLAB手写数字识别系统>由会员分享,可在线阅读,更多相关<基于人工神经网络的MATLAB手写数字识别系统(8页珍藏版)>请在人人文库网上搜索. 1.基 ...
- Python(TensorFlow框架)实现手写数字识别系统
手写数字识别算法的设计与实现 本文使用python基于TensorFlow设计手写数字识别算法,并编程实现GUI界面,构建手写数字识别系统.这是本人的本科毕业论文课题,当然,这个也是机器学习的基本问题 ...
- 手写数字识别系统(python+K-近邻完整代码)
手写数字图片识别系统的介绍: 由于数字图片是一个 32*32 维的二进制向量,不能直接放到模型中使用,所以: 首先需要先将每一个 3232 维的向量转化为 1(3232)维的向量,即 11024 维数 ...
- Python TensorFlow框架 实现手写数字识别系统
手写数字识别算法的设计与实现 本文使用python基于TensorFlow设计手写数字识别算法,并编程实现GUI界面,构建手写数字识别系统.这是本人的本科毕业论文课题,当然,这个也是机器学习的基本问题 ...
- 深度学习笔记:01快速构建一个手写数字识别系统以及张量的概念
深度学习笔记:01快速构建一个手写数字识别系统 神经网络代码最好运行在GPU中,但是对于初学者来说运行在GPU上成本太高了,所以先运行在CPU中,就是慢一些. 一.安装keras框架 使用管理员模式打 ...
- 完整代码及解析!!手写数字识别系统(手写数字测试识别 + pytoch实现 + 完整代码及解析)
基于深度学习的手写数字识别系统 一.实验目的 1.任选实验环境及深度学习框架,实现手写数字识别系统: 2.掌握所采用的深度血迹框架构建方式. 二.实验理论基础 1.MNIST数据集 MNI ...
最新文章
- Silverlight+WCF 新手实例 象棋 主界面-实时聊天区(二十五)
- (0090)iOS开发之本地文件预览的三种方法(1)
- 生成建表脚本up_CreateTable
- 三十八、Vue项目上手 | 用户管理系统(上篇)
- android显示矩阵大小,关于android:显示代表灰度图像的双值矩阵
- 使用 iTextSharp 生成 PDF 表格
- html 属性存储对象,在HTML5 localStorage中存储对象
- ThinkPHP 3.1.2 模板中的变量
- 弱密码、未授权加固/修复建议
- asp.net使用MailMessage发送邮件的方法
- 紫光扫描仪ocr_清华紫光扫描仪的安装教程及使用方法
- ForkJoinPool api 详解
- CloudFlare的Worker免费部署服务
- 在html图片上方叠加一个半透明颜色层,并在半透明颜色层上叠加文字
- 修改google搜索引擎非hk方法
- C语言零基础入门习题(八)四则运算
- 2017第36届西安春季广告标识办公印刷LED光电照明产业博览会会刊(参展商名录)
- 12月5日计算机考试浙江卷英语答案,英语b级试卷?2019年12月b级真题试卷。
- [轉]运用项目管理WBS方法成功创建网店
- 印度身上中国软件能学什么
热门文章
- 关于 pygame中,检测按键按下
- WT588F02KD-24SS语音芯片(数码管显示驱动ic)在多功能烧水壶的应用设计方案
- 京东秒杀程序定时自动抢购茅台,原来我们一直抢不到是有原因的!(完整源码在文末)
- [ 常用工具篇 ] 还在嫌截图麻烦?快来使用 Win10 原生的截图工具 Snipping Tool 吧
- table.on('tool(test) test值是什么
- v-model的基本使用
- 网络工具netstat与ss
- 减去“商品名”这层包装外衣,让你看清“药品名”的真谛 - 看看你的感冒在中西医各怎样解读与配药
- RenderTexture 橡皮檫 电筒效果
- 【ava数据集】ava数据集下载 使用迅雷