第10讲--统计模式识别--手写数字识别_第1页
第10讲--统计模式识别--手写数字识别_第2页
第10讲--统计模式识别--手写数字识别_第3页
第10讲--统计模式识别--手写数字识别_第4页
第10讲--统计模式识别--手写数字识别_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、统计模式识别手写数字识别第10讲模式识别模式识别的关键的关键模式准确表达模式准确表达手写数字的模式如何表达?手写数字的模式如何表达?采取的模式是一个小图形中含有的点,与数字之间的是一个小图形中含有的点,与数字之间的一个模型。一个模型。线性的?还是非线性的?线性的?还是非线性的?非线性模型的典型算法人工神经网络人工神经网络ANN Artificial Neural NetworkANN 由输入层由输入层 input layer隐含层:隐含层:hidden layer 可以多层可以多层输出层:输出层:output layer输入层输入层 -输出层输出层 每个节点间,有权重每个节点间,有权重w计算计

2、算 s=xiwi ,再取函数值,得到输出值,但,再取函数值,得到输出值,但型函数型函数 sigmoid O=1/(1+e(-s) Back propogation 手写数字图像处理将每个数字的小图像整理出来将每个数字的小图像整理出来将每个整理的数字小图像转换为一个向量,将每个整理的数字小图像转换为一个向量,输入神经网络,训练建模型输入神经网络,训练建模型预测预测Python图像处理包PIL包from PIL import Image加载图像:im = Image.open(rE:pyteachdigit.jpg)去除背景灰度im = im.convert(“L”) # 转换为灰度8位图像im

3、= im.point(lambda x: 255if x 196 else 0) #代表数字的图像的像素值是0im = im.convert(1) #1位像素,黑和白im.save(sample_1.bmp)小数字方块的“挖出来”画图中找出行列的大致位置画图中找出行列的大致位置 xs = 0, 45, 88, 125, 170, 213, 251, 289, 324, 364, w ys = 0, 39, 89, 135, 183, h10Python挖小图像块挖小图像块box = (x, y, xsi+1, ysj+1) # 一个字符所在图像的位置 t = im.crop(box).copy

4、() # 将字符挖出来11挖小数字的程序挖小数字的程序def split(im): # im为去除背景后的整个图像为去除背景后的整个图像 assert im.mode = 1 result = w, h = im.size xs = 0, 45, 88, 125, 170, 213, 251, 289, 324, 364, w ys = 0, 39, 89, 135, 183, h for i, x in enumerate(xs): if i + 1 = len(xs): break for j, y in enumerate(ys): if j + 1 = len(ys): break b

5、ox = (x, y, xsi+1, ysj+1) # 一个字符所在图像的位置一个字符所在图像的位置 t = im.crop(box).copy() # 将字符挖出来将字符挖出来 t.save(e:pyteach+str(i + 1) % 10)+_+str(j)+.bmp)12标准化标准化提取出来的每个字符图像,大小不一,字符在小图像中的位置不居中每个小图像的大小都是32*32,且字符的上下、左右边距一样小图像的标准化小图像的标准化def to_32_32(im,ii,jj):# 参数im是待处理的小图像,ii,jj的结合形成图像文件的名字# 图像分割时保存的文件名0_1.bmp,代表字符0

6、的第二个小图像 im = im.convert(L) # 转灰度 im = im.point(lambda x: 255 if x 196 else 0) w,h=im.size xrow= ycol= for i in range(w): # 找字符在图像中最左右、上下的起始位置 for j in range(h): pixel=im.getpixel(i,j) if (pixel 196 else 0) y=np.array(0,1) # 纵向,y轴,第一个2*2小块的上下像素位置 features= for j in range(16): x=np.array(0,1) # 横向,x轴,

7、第一个2*2小块的左右像素位置 for i in range(16): 提取特征的函数提取特征的函数box = (x0, y0, x1+1, y1+1) # box是每个2*2的小块的矩形,+1的原因是crop函数认定右侧为开区间 t = im.crop(box).copy() count=0.0 for ii in range(2): # 统计2*2小矩形中的黑色像素点的个数 for jj in range(2): pixel = t.getpixel(ii,jj) #提取像素值 if (pixel1): count +=1.0 features.append(count) # 将计算得到的

8、特征追加到列表中 x=x+2 # 水平方向,下一个小2*2矩形的左、右边距位置 y=y+2 # 垂直方向,下一个小2*2矩形的上、下边距位置 return features #feature就是一个小图像的特征神经网络模型的设计神经网络模型的设计输入层:向量的长度,256最后输出层:一般采用正交编码中间层:64,注意过拟合神经网络神经网络算法算法http:/ 下载拷贝到C:Anaconda3Libsite-packages即可(是2.x版本,需要小修改,进入3.x)拷贝到 Anaconda3Libsite-packages目录下使用from pyneurgen.neuralnet import NeuralNet神经网络代码神经网络代码#整理训练集数据netTrainDataInput= # 存储输入数据,XnetTrainDataoutput= # 存储输出点的真值,Yfor i in range(10): outNode=0.0*10 # 训练集的函数真值,每种模式对应的位置数字为1 outNodei=1.0 for j in range(5): im = Image.open(e:pyteach+str(i)+_+st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论