资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
BP 神经网络识别手写数字1.1.图像的预处理图像的预处理对手写数字图像样本灰度化处理,二值化处理,归一化调整等预处理。其中二值化处理利用 greythresh 函数得到图像的全局阈值,然后使用 im2bw 将灰度图像转换为二值图像。Ibw = im2bw(I1,greythresh(I1);-Ibw 为二值化图像的存储矩阵。bw2 = edu_imgcrop(Ibw);%找到图像边界y2temp x2temp = size(bw);x1=1;y1=1;x2=x2temp;y2=y2temp;% 找左边空白cntB=1;while (sum(bw(:,cntB)=y2temp)x1=x1+1;cntB=cntB+1;end% 左边cntB=1;while (sum(bw(cntB,:)=x2temp)y1=y1+1;cntB=cntB+1;end% 上边cntB=x2temp;while (sum(bw(:,cntB)=y2temp)x2=x2-1;cntB=cntB-1;end% 下边cntB=y2temp;while (sum(bw(cntB,:)=x2temp)y2=y2-1;cntB=cntB-1;endbw2=imcrop(bw,x1,y1,(x2-x1),(y2-y1);-对图像进行裁剪,使边框完全贴近字符。归一化处理将图片归一化为 2828 像素点阵图。2.特征提取特征提取将经过预处理的后的数字图像中提取最能体现这个字符特点的特征向量,然后提取出训练样本中的特征向量带入 BP 网络中就可以对网络进行训练。可以采用逐像素特征提取方法提取数字样本的特征向量。归一化后的图像形成一个的布尔矩阵,依次取每列的元素转化为 7841 的列矩阵,及数字字符2828的特征向量。还可以对每幅单个手写体图像进行边缘裁剪后,将裁减后的二值图像转换成 5*7 即 35 维的特征向量,转换过程如下:bw_7050=imresize(bw2,70,50);for cnt=1:7for cnt2=1:5Atemp=sum(bw_7050(cnt*10-9):(cnt*10),(cnt2*10-9):(cnt2*10);%10*10boxlett(cnt-1)*5+cnt2)=sum(Atemp);endendlett=(100-lett)/100);lett=lett;3.BP3.BP 神经网络神经网络BP 神经网络是一个典型的多层神经网络,它包含了输入层,隐藏层和输出层,隐层可以有一层或多层,每层上的神经元称为节点或单元,它们由可修定的权值(w)互连,除了连接输入单元,每个单元还连接一个偏置(b)。3.13.1 输入层神经元个数的确定输入层神经元个数的确定将数字图像的特征向量作为神经网络的输入,所以神经网络的输入层神经元个数等于特征向量的维数,即 2828=784 个输入神经元。要识别 10 个数字,所以输出选择为 101 的矩阵,即输出节点数为 10,输入为 0 时,第一个神经元为 1,其他为 0,;输入数字为 1 时,第二个神经元为 1,其他为 0;以此类推。3.2 隐含层数和神经元个数的确定隐含层数和神经元个数的确定隐含层数越多,神经网络的学习速度越慢,所以选 3 层神经网络。隐含层神经元的个数是根据网络收敛性能的好坏来确定的,在总结大量网络结构的基础上,得到经验公式:s=,其中,n 为输51. 035. 077. 054. 212. 043. 02mnmnm入层神经元个数,m 为输出层神经元个数,可得隐含层神经元个数为 15。3.3 BP 神经网络构造神经网络构造BP 算法由两部分组成:信息的正向传递与误差的反向传播。在正向传递中,输入信息从输入层经隐含层逐层计算传向输出层,每一层神经元的状态只影响下一层神经元的状态。如果在输出层没有得到期望的输出则计算输出层的误差变化值,然后转向反向传播,通过网络将误差信号沿原来的连接通路反向修改各层神经元的权值直到达到期望目标。BP 算法属于有监督的学习算法:根据训练样本和期望输出设置合适的权值,不断调整网络连接的权值,使误差达到实际的要求。网络结构初始化:(784,15,10),innum=784,midnum=15,outnum=10;权值初始化:w1=rands(midnum,innum); 输入层到隐含层 b1=rands(midnum,1);W2=rands(midnum,outnum);隐含层到输出层b2=rands(outnum,1);输出函数: xyy 网络预测输出:y(x)=input_train(:,i)隐含层输出:y=jjjbxw11输出层的输出: b22,ywxhbw梯度下降算法反向传播学习规则是基于梯度下降算法的,梯度下降算法是利用梯度下降的方向迭代寻找目标函数的参数的最优值,就是向着减少误差的方向调整。学习效率为。损失函数: 2 ,|21,xhxybwCbw x求偏导:2 21 1vvcvvcc梯度向量: Tvc vcc 21,cvcvv,所以,kkkwcww,lllbcbb,主要的 matlab 代码:Innum=785;Midnum=15;Outnum=10;w1=rands(midnum,innum); b1=rands(midnum,1);W2=rands(midnum,outnum);b2=rands(outnum,1);W2_1=w2;w2_2=w2_1;W1_1=w2;w1_2=w1_1;B1_1=b1;b1_2=b1_1;b2_1=b2;b2_2=b2_1;%学习率xite=0.1;alfa=0.01;% 网络训练for i=1:1:4500% 网络预测输出x=input_train(:,i);% 隐含层输出for j=1:1:midnumI(j)=input_train(:,i)*w1(j,:)+b1(j);Iout(j)=1/(1+exp(double(-I(j);end% 输出层输出yn=w2*Iout+b2;% 权值阀值修正%计算误差e=output_train(:,i)-yn; %计算权值变化率dw2=e*Iout;db2=e;%=由于采用的是 sigmoid 单元,所以要对每个输出单元以及隐藏单元计算误差项=%for j=1:1:midnumS=1/(1+exp(double(-I(j);FI(j)=S*(1-S);end for k=1:1:innumfor j=1:1:midnumdw1(k,j)=FI(j)*x(k)*(w2(j,:)*e);%db1(j)=FI(j)*(w2(j,:)*e);endendw1=w1_1+xite*dw1;b1=b1_1+xite*db1;w2=w2_1+xite*dw2;b2=b2_1+xite*db2;w1_2=w1_1;w1_1=w1;w2_2=w2_1;w2_1=w2;b1_2=b1_1;b1_1=b1;b2_2=b2_1;b2_1=b2;End4.4. BP 神经网络的测试神经网络的测试
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号