在手写数字识别的例子中_手写识别

在手写数字识别的例子中_手写识别1.概念介绍:图像识别(ImageRecognition)是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术。 图像识别的发展经历了三个阶段:文字识别、数字图像处理与识别、物体识别。机器学习领域一般将此类识别问题转化为分类问题。手写识别是常见的图像识别任务。计算机通过手写体图片来识别出图片中的字,与印刷字体不同的是,不同人的手写体风…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

1.概念介绍:

图像识别(Image Recognition)是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术。 

图像识别的发展经历了三个阶段:文字识别、数字图像处理与识别、物体识别。机器学习领域一般将此类识别问题转化为分类问题。

手写识别是常见的图像识别任务。计算机通过手写体图片来识别出图片中的字,与印刷字体不同的是,不同人的手写体风格迥异,大小不一, 造成了计算机对手写识别任务的一些困难。 

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

2.数据介绍:

MNIST的下载链接:http://yann.lecun.com/exdb/mnist/。

MNIST是一个包含数字0~9的手写体图片数据集,图片已归一化为以手写数 字为中心的28*28规格的图片。

MNIST由训练集与测试集两个部分组成,各部分 规模如下: 

                                         训练集:60,000个手写体图片及对应标签 

                                         测试集:10,000个手写体图片及对应标签

在手写数字识别的例子中_手写识别

DBRHD(Pen-Based Recognition of Handwritten Digits Data Set)是UCI的机器学习中心提供的数字手写体数据库: https://archive.ics.uci.edu/ml/datasets/PenBased+Recognition+of+Handwritten+Digits。 

DBRHD数据集包含大量的数字0~9的手写体图片,这些图片来源于44位不同的人的手写数字,图片已归一化为以手写数字为中心的32*32规格的图片。

DBRHD的训练集与测试 集组成如下:

                                                  训练集:7,494个手写体图片及对应标签,来源于40位手写者 

                                                  测试集:3,498个手写体图片及对应标签,来源于14位手写者

在手写数字识别的例子中_手写识别

在手写数字识别的例子中_手写识别

3.任务过程:

在手写数字识别的例子中_手写识别

①输入

在手写数字识别的例子中_手写识别

②输出

在手写数字识别的例子中_手写识别

③MPL的结构

在手写数字识别的例子中_手写识别

④步骤

在手写数字识别的例子中_手写识别

import numpy as np
#使用listdir模块,用于访问本地文件
from os import listdir
from sklearn.neural_network import MLPClassifier

Jetbrains全家桶1年46,售后保障稳定

#定义img2vector函数,将加载的3232 的图片矩阵展开成一列向量
def img2vector(fileName):
retMat =np.zeros([1024],int)
fr = open(fileName) #打开包含3232大小的数字文件
lines =fr.readlines() #读取文件的所有行
for i in range(32):
for j in range(32): #将01数字存放在retMat
retMat[i*32+j]=lines[i][j];
return retMat
#并将样本标签转化为one-hot向量
def readDataSet(path):
fileList =listdir(path) #获取文件夹下所有文件
numFiles =len(fileList) #统计需要读取的文件的数目
dataSet =np.zeros([numFiles,1024],int) #用于存放所有的数字文件
hwLabels =np.zeros([numFiles,10]) #用于存放对应的标签one-hot
for i in range(numFiles):
filePath =fileList[i] #获取文件名称/路径
digit =int(filePath.split(’_’)[0])
hwLabels[i][digit]=1.0
dataSet[i]=img2vector(path+’/’+filePath)#读取文件内容
return dataSet,hwLabels
train_dataSet,train_hwLabels =readDataSet(‘trainingDigits’)

#构建神经网络:设置网络的隐藏层数、各隐藏层神经元个数、
# 激活函数、学习率、优化方法、最大迭代次数。
#hidden_layer_sizes 存放的是一个元组,表示第i层隐藏层里神经元的个数
# 使用logistic激活函数和adam优化方法,并令初始学习率为0.0001
clf =MLPClassifier(hidden_layer_sizes=(50,),activation=‘logistic’,
solver=‘adam’,learning_rate_init=0.0001,max_iter=2000)
#fit函数能够根据训练集及对应标签集自动设置多层感知机的输入与输出层的神经元个数。
#例如train_dataSet为n1024的矩阵,train_hwLabels为n10的矩阵,
# 则fit函数将MLP的输入层神经元个数设为1024,输出层神经元个数为 10.
clf.fit(train_dataSet,train_hwLabels)

#测试集评价
dataSet,hwlLabels =readDataSet(‘testDigits’)
res=clf.predict(dataSet) #对测试集进行预测
error_num =0 #统计预测错误的数目
num =len(dataSet) #测试集的数目
for i in range(num):
#比较长度为10的数组,返回包含01的数组,0为不同,1为相同
if np.sum(res[i]==hwlLabels[i])<10:
error_num+=1
print(“Total num:”,num,“Wrong num:”,error_num,” WrongRate:”,error_num/float(num))

实验效果:

以下结果为课程结果,我自己实验的结果与这个结果相差不大。

在手写数字识别的例子中_手写识别

在手写数字识别的例子中_手写识别

在手写数字识别的例子中_手写识别

2.使用KNN分类器识别数据集DBRHD的手写数字(内容与上面差不多,只是使用算法有些差别)

在手写数字识别的例子中_手写识别

在手写数字识别的例子中_手写识别

import numpy as np
#使用listdir模块,用于访问本地文件
from os import listdir
from sklearn import neighbors

#定义img2vector函数,将加载的3232 的图片矩阵展开成一列向量
def img2vector(fileName):
retMat =np.zeros([1024],int)
fr = open(fileName) #打开包含3232大小的数字文件
lines =fr.readlines() #读取文件的所有行
for i in range(32):
for j in range(32): #将01数字存放在retMat
retMat[i*32+j]=lines[i][j];
return retMat
#并将样本标签转化为one-hot向量
def readDataSet(path):
fileList =listdir(path) #获取文件夹下所有文件
numFiles =len(fileList) #统计需要读取的文件的数目
dataSet =np.zeros([numFiles,1024],int) #用于存放所有的数字文件
hwLabels =np.zeros([numFiles,10]) #用于存放对应的标签one-hot
for i in range(numFiles):
filePath =fileList[i] #获取文件名称/路径
digit =int(filePath.split(’_’)[0])
hwLabels[i][digit]=1.0
dataSet[i]=img2vector(path+’/’+filePath)#读取文件内容
return dataSet,hwLabels
train_dataSet,train_hwLabels =readDataSet(‘trainingDigits’)
#构建KNN分类器:设置查找算法以及邻居点 数量(k)值。
#KNN是一种懒惰学习法,没有学习过程,只在预测时去查找最近邻的点,
#数据集的输入就是构建KNN分类器的过程
knn =neighbors.KNeighborsClassifier(algorithm=‘kd_tree’,n_neighbors=3)
knn.fit(train_dataSet,train_hwLabels)

#测试集评价
dataSet,hwlLabels =readDataSet(‘testDigits’)
res=knn.predict(dataSet) #对测试集进行预测
error_num =np.sum(res!=hwlLabels) #统计预测错误的数目
num =len(dataSet) #测试集的数目

print(“Total num:”,num,“Wrong num:”,error_num,” WrongRate:”,error_num/float(num))

实验结果(同上)

在手写数字识别的例子中_手写识别

在手写数字识别的例子中_手写识别

在手写数字识别的例子中_手写识别

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234904.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据结构(严蔚敏版)与算法的实现(含全部代码)

    数据结构(严蔚敏版)与算法的实现(含全部代码)目录基础c/c++代码优化及常见错误c语言位运算的妙用-程序优化c/c++进制转换方法汇总(含全部代码)二进制数-北邮2012研究生复试质因子分解除树和图外的数据结构可以使用STL:C++STL的使用数据结构线性表顺序表循环左移(2010联考真题)单链表单链表相邻结点逆置(2019北邮考研真…

    2022年6月28日
    19
  • 动漫常用网站/APP 彻底帮你解决看动漫的烦恼[通俗易懂]

    动漫常用网站/APP 彻底帮你解决看动漫的烦恼[通俗易懂]本文是众多使用技巧中其中的一篇,全部使用技巧点击链接查看,保证你收获满满我主页中的思维导图中内容大多从我的笔记中整理而来,相应技巧可在笔记中查找原题,有兴趣的可以去我的主页了解更多计算机学科的精品思维导图整理本文可以转载,但请注明来处,觉得整理的不错的小伙伴可以点赞关注支持一下哦!本文提到的所有软件和工具,可关注公众号一起学计算机点击资源获取获得本人最常用的网站就是AGE动漫,这是我用过最好的动漫网站,资源算是最全的吧,并且大多数动漫都提供百度云链接,可下载观看,…

    2022年8月23日
    3
  • AMEYA360讲解电子元器件代理怎么做

    AMEYA360讲解电子元器件代理怎么做时代的发展可以带来的优势很多,对很多行业也都有很多方面的支持,可以提供多方面的发展支持,展现出来的优势也是很多的,而提到了电子元器件的使用,也是现在很专业的设备的使用,因此要关注的内容非常多。在国内想要购买到质量高的国外电子元器件的话,是可以选择电子元器件代理购买的,那么要如何选择?具体操作的内容是什么?1、考虑到合法代理不论在什么情况下,想要选择到专业可靠的电子元器件代理的话,那么的肯定都是要首选合法的代理结构才可以的,只有这样才可以顺利的保证各种服务的质量,也不会销售各种残次品,保证了产品的

    2022年6月18日
    29
  • java定时任务实现的几种方式注解(JAVA定时任务)

    摘要:在开发测试工具的应用后台,经常听到同事说要做个定时任务把做日志处理,或者数据清理,包括做些复杂的业务计算逻辑,在选择定时任务的时候,怎么能够快速实现,并且选择一种更适合自己的方式呢?我这里把定时任务的实现收集整理了一些方法,希望可以帮到刚开始做定时任务的同学,写得不对的地方请指正。一在开发测试工具的应用后台,经常听到同事说要做个定时任务把做日志处理,或者数据清理,…

    2022年4月14日
    776
  • pycharm2021.5专业版最新激活码(最新序列号破解)[通俗易懂]

    pycharm2021.5专业版最新激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    117
  • 虚拟机与宿主机网络配置——可互通可上网「建议收藏」

    虚拟机与宿主机网络配置——可互通可上网「建议收藏」     为了学习和使用Linux,多数人选择了使用虚拟机的方式来安装Linux系统。这样我们就可以在windows系统中安装Linux系统了,其中windows机器系统本身我们称作宿主机,安装的虚拟机系统我们简称虚拟机。     由于虚拟机提供的几种网络方式,要么是虚拟机可以ping通宿主机反之不行,要么是虚拟机之间可以互通但宿主机不能访问虚拟机,所以在实际应用中多数被两者间的网络互通和是否…

    2022年8月20日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号