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

在手写数字识别的例子中_手写识别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))

实验结果(同上)

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

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

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • linux如何卸载eclipse(eclipse工具linux版本)

    1.安装JDK6先确认已经添加了软件源,在系统-系统管理-软件源-其它软件,确保已经选中http://archive.canonical.com/ubuntulucidpartner这个源。sudoapt-getinstallsun-java6-jdk设置系统环境变量exportJAVA_HOME=/usr/lib/jvm/java-6-sun(根据具体的安装路径)expor…

  • numpy数据类型dtype转换

    numpy数据类型dtype转换这篇文章我们玩玩numpy的数值数据类型转换 导入numpy&gt;&gt;&gt;importnumpyasnp 一、随便玩玩生成一个浮点数组&gt;&gt;&gt;a=np.random.random(4)看看信息&gt;&gt;&gt;aarray([0.0945377,0.52199916,0.62490646,…

  • 静态网页设计作品_web静态网页模板

    静态网页设计作品_web静态网页模板作品汇报新的一年新的成就,经历了一星期的思考,新的作品终于完成啦,14张页面经历了多次的修改和揣摩,希望大家能够喜欢。作品主题是“春节”页面框架页面应用了导航栏下拉的形式,使导航栏更加简洁,让浏览者留下空间感,导航栏下拉形式能够让浏览者清晰的浏览页面,页面以红色为底色,更能突出春节这一主题,能够突出春节的喜庆首页首页运用表单和超链接,能够突出该页面的作用,表单运用border-radius属性,使页面更美观春节简介和起源禁烟令的实施和疫情的爆发,让中国春节减少了许多的年味,大部分人都快遗

  • 使用ARP命令[通俗易懂]

    使用ARP命令[通俗易懂]讲解ARPCache更新过程,并分析对应请求报文以及响应报文的内容。1.建立网络拓扑2.填写4个主机的ip地址和子网掩码3.分别对主机pc0和pc1的命令行中输入“arp-a”命令查看其ARP高速缓存,发现无任何缓存信息。4.切换到simulation模式,pc0和pc1的ip分别为源地址和目的地址5.创建一个简单的PDU6.可以发现pc0和pc1之间成功进行了一次传输,即pc0得到了pc1的ip地址和MAC地址7.可以看出pc0发送了一个广播报文8.pc1得到响应

    2022年10月31日
  • auto.js微信自动回复脚本_微信群助手机器人

    auto.js微信自动回复脚本_微信群助手机器人一、前言整体思路1)找到头像右上角有消息标志的聊天(注意直接跑下面代码的时候请确保聊天界面由此前提)2)点击进入聊天窗口,找到所有消息3)取最后一个消息(最新消息)4)和之前的新消息对比是否发生变化5)新消息推送至API6)收到API消息发送微信v8版本发送消息时,不再显示“发送”按钮了,也就没办法用找到“发送”控件的方法实现发送消息了。尝试用KeyCode(code)方式,发送回车键,发现也无效,原因查了一下好像是需要ROOT还是安卓9以上此方法失效。于是用坐标点击的方式点击键盘上的

  • 前端常见跨域解决方案[通俗易懂]

    前端常见跨域解决方案[通俗易懂]前端常见跨域解决方案

发表回复

您的电子邮箱地址不会被公开。

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