人工神经网络设计课程报告byhhuWord文档下载推荐.docx

上传人:wj 文档编号:833704 上传时间:2023-04-29 格式:DOCX 页数:40 大小:235.18KB
下载 相关 举报
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第1页
第1页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第2页
第2页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第3页
第3页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第4页
第4页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第5页
第5页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第6页
第6页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第7页
第7页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第8页
第8页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第9页
第9页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第10页
第10页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第11页
第11页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第12页
第12页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第13页
第13页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第14页
第14页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第15页
第15页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第16页
第16页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第17页
第17页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第18页
第18页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第19页
第19页 / 共40页
人工神经网络设计课程报告byhhuWord文档下载推荐.docx_第20页
第20页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

人工神经网络设计课程报告byhhuWord文档下载推荐.docx

《人工神经网络设计课程报告byhhuWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《人工神经网络设计课程报告byhhuWord文档下载推荐.docx(40页珍藏版)》请在冰点文库上搜索。

人工神经网络设计课程报告byhhuWord文档下载推荐.docx

在对字母进行识别之前,需要将字母进行预处理,即将待识别的26个字母中的每一个字母都通过的方格形式进行数字化处理,其有数据的位置设为1,其他位置设为-1。

如图1给出了字母A、B和C的数字化过程。

下面给出了字母A的数字化处理结果,是用一个1*30向量表示,其结果为:

P[0][30]={-1,-1,1,1,1,1,-1,1,-1,1,-1,-1,1,-1,-1,1,-1,-1,-1,1,-1,1,-1,-1,-1,-1,1,1,1,1};

其他字母对应的向量也做类似的处理。

最终的标准输入矩阵P[26][30],包含26个字母向量。

-1

1

ABC

图1字母数字化样式

2、网络的初始设计

本次网络主要选择如图2所示的网络结构,其中有一个输入层,一个隐含层,一个输出层,网络结构为30-30-1,其中,。

图2网络结构

本次如图2所示的网络中,p为待输入的学习(识别)向量,因为每个字母都有30个元素的向量表示,所以p的维数为30*1,w1为第一层权值,维数30*30,w2为第二层权值,维数30*1,b1为第一层偏值,维数30*1,b2为第二层偏值,维数1*1,a1为第一层输出,维数30*1,a2为网络最后的输出,至此基本的网络结构初始设计完毕。

3、初始化各项参数

本次初始化参数主要包括初始化隐含层第一层的权值w1[30][30]和偏置值b1[30],初始换隐含层第二层的权值w2[30]和偏置值b2,本次实验选取的初始值为0-0.5之间的随机实数。

其中随机实数可以通过调用JAVA语言的random()方法得到。

对于学习速度α可以先设置为:

α=0.01,当然,也可以在后面的实验过程中不断的调节α的值使得学习的更快更好,具体代码实现见附录。

4、前向传播设计

在前面工作完成的基础上,首先需要根据BP算法的公式和计算第一层网络的输出a1,然后根据公式计算出最后输出层的a2,这就是BP神经网络的前向传播过程。

最后根据计算出误差e,具体代码实现见附录。

5、敏感性计算

由于在计算敏感性之前需要用到传输函数的导数,故需要提前计算出来。

具体导数推导如式(5.1)和式(5.2)所示:

(5.1)

(5.2)

然后根据式(5.1)和式(5.2)可以得到s2的计算公式和第一层敏感性s1的计算公式,具体代码实现见附录。

6、权值和偏值的更新

这里需要用到我之前设置的学习速度α,实验中可以尝试修改α的值,观察实验效果。

具体的权值偏值计算可以根据公式(6.1)、公式(6.2)、公式(6.3)、公式(6.4)计算得到,具体代码实现见附录。

(6.1)

(6.2)

(6.3)

(6.4)

7、测试网络性能

BP算法需要不停地迭代去更新权值和偏置直至某次迭代后误差e满足了实验的要求或者达到了最大的迭代次数。

学习后预期的效果应当是当使用训练样本给BP网络识别时,它能够识别出字母A-Z,输出对应的数字0-25;

当使用隐藏部分数据的样本给它识别时,如果它能够识别多数A-Z破损数据,说明该BP网络的抗干扰、容错能力较强,反之如果大部分无法识别,则说明本网络容错能力较差。

三、实验结果展示

1、实验一

学习速度a=0.1,误差e=0.01,迭代次数m=2000,学习结束效果如图3所示。

图3实验一结果部分展示

2、实验二

学习速度a=0.01,误差e=0.01,迭代次数m=2000,实验结果如图4所示。

图4实验二结果部分展示

3、实验三

学习速度a=0.01,误差e=0.0001,迭代次数m=2000,实验结果如图5所示。

图5实验三结果部分展示

4、实验四

学习速度a=0.015,误差e=0.0001,迭代次数m=3000,实验结果如图6所示。

图6实验四结果部分展示

通过观察四次实验的效果图可以清楚的发现,学习速度,误差标准和迭代次数对识别的效果都有影响。

显然本次实验最合适的学习速度a=0.015,可以发现当学习速度不变时,误差选取的越小,迭代次数越大,则识别的效果越好。

5、实验五

为了简单的验证一下BP网络的容错能力,下面进行实验五,在原始数据p基础上隐藏最后一行(隐藏16%)进行识别,具体参数为:

a=0.015,e=0.0001,m=3000,实验结果如图7所示。

图7实验五结果部分展示

由图7可以发现,绝大部分破碎的数据无法被正确识别,小部分字母可以被识别。

因此可以说明本次实验构造的BP网络的容错性较差。

四、实验总结

本次实验主要实现基于BP网络的字母识别功能,通过实验我深入了解了BP算法的原理,能够通过编程搭建一个简单的BP网络。

在实验中通过调整学习速度,迭代次数,误差大小,实现了对BP网络性能的优化。

通过本次实验,我也体会到了BP算法还有有它很大的局限性的,比如:

训练次数多使得学习效率较低,算法的收敛速度较慢,易形成局部极小而得不到全局最优等。

在实验中,我发现当学习速度设为0.1的时候,算法的震荡较为验证,结果不好,并且需要的迭代次数大,但是当学习速度设为0.01时。

算法明显稳定很多,结果处理的好,需要的迭代次数少,能较快的给出相应的正确的结果。

附录

publicclassBP_Algorithm{

publicstaticvoidmain(Stringargs[]){ //BP主方法

Datadata=newData();

show(data.p);

//输出元数据

BP_init(data);

//初始化参数

BP_learn(data,3000);

//调用BP学习算法,5200为学习迭代次数,可以调节

BP_test(data,data.p);

//测试BP算法的正确性

BP_test(data,data.p_test_16);

//测试隐藏了16%数据的正确性

BP_test(data,data.p_test_33);

//测试隐藏了33%数据的正确性

}

staticvoidshow(floatp[][]){//根据矩阵用*打印出字幕图像的方法

inti,j,k;

for(i=0;

i<

26;

i++)

{

for(j=0;

j<

6;

j++)

{

for(k=0;

k<

5;

k++)

{

if(p[i][j+6*k]==1)

{

System.out.print("

*"

);

}

else

System.out.print("

"

}

}

System.out.println();

}

System.out.println();

}

staticvoidBP_init(Datadata){

//初始化参数方法,给权值和偏值赋初值(w1,w2,b1,b2)

inti,j;

30;

i++)

for(j=0;

j++)

{

//调用java的random方法生成0~0.5之间的实数

data.w1[i][j]=(float)((Math.random())/2.0);

}

data.w2[i]=(float)((Math.random())/2.0);

data.b1[i]=(float)((Math.random())/2.0);

}

data.b2=0.48f;

staticvoidBP_learn(Datadata,intcount){//BP算法的学习过程,其中m为迭代次数

inti,j,m;

for(m=0;

m<

count;

m++) //BP算法的学习过程

for(i=0;

i++)//对于某一个字母一轮结束初始化a1,a2,s1,s2

{

data.a1[i]=0;

data.s1[i]=0;

}

data.a2=0;

data.s2=0;

if(m%26==0&

&

m!

=0&

(data.e/26)>

(data.e/26)<

=0.0001)//满足误差要求,结束迭代

{

System.out.println("

OK,误差为:

+data.e);

break;

}

elseif(m%26==0&

=0)//一轮结束,重置均误差

data.e=0;

for(i=0;

i++)//前向传播

for(j=0;

{

data.a1[i]+=data.w1[i][j]*data.p[m%26][j];

}

}

for(i=0;

i++)//使用s型函数计算第一层结果值

data.a1[i]=data.a1[i]+data.b1[i];

data.a1[i]=(float)(1/(1+Math.pow(Math.E,-data.a1[i])));

}

i++)//使用线性函数计算第二层结果值

data.a2=data.a2+data.w2[i]*data.a1[i];

}

data.a2=data.a2+data.b2;

data.e_true=(m%26)-data.a2;

data.e=data.e+data.e_true;

//累加一次迭代的真实误差

data.s2=(-2)*data.e_true;

//计算s2敏感性

i++) //针对计算第一层敏感性初始化F(n)

for(j=0;

{

if(i==j)

{

data.temp[i][j]=(1-data.a1[i])*data.a1[i];

}

i++)//计算s1敏感性

data.s1[i]=data.temp[i][i]*data.w2[i];

data.s1[i]=data.s1[i]*data.s2;

i++)//第二层权值偏置值修正

data.w2[i]=data.w2[i]-data.a*data.s2*data.a1[i];

data.b2=data.b2-data.a*data.s2;

i++)//计算s2*a1

{

for(j=0;

data.temp[i][j]=data.s1[i]*data.p[m%26][j];

i++)//第一层权值偏置值修正

data.w1[i][j]=data.w1[i][j]-data.a*data.temp[i][j];

data.b1[i]=data.b1[i]-data.a*data.s1[i];

//BP测试方法,输出结果

staticvoidBP_test(Datadata,floatp[][]){

inti,j,k;

for(i=0;

for(j=0;

j++)//展示测试数据

for(k=0;

{

if(p[i][j+6*k]==1)

{

System.out.print("

}

else

System.out.print("

}

}

System.out.println();

}

j++)//初始化网络第一层第二层输出

data.a1[j]=0;

data.a2=0;

j++)//前向传播

for(k=0;

{

data.a1[j]+=data.w1[j][k]*p[i][k];

}

data.a1[j]=data.a1[j]+data.b1[j];

data.a1[j]=(float)(1/(1+Math.pow(Math.E,-data.a1[j])));

data.a2+=data.w2[j]*data.a1[j];

data.a2=data.a2+data.b2;

System.out.println("

对应数字:

"

+data.a2);

}

publicclassData{

//原始A-Z数据

protectedfloatp[][]={ {-1,-1,1,1,1,1,-1,1,-1,1,-1,-1,1,-1,-1,1,-1,-1,-1,1,-1,1,-1,-1,-1,-1,1,1,1,1} //A

{1,1,1,1,1,1,1,-1,1,-1,-1,1,1,-1,1,-1,-1,1,1,-1,1,-1,-1,1,-1,1,-1,1,1,-1}//B

{-1,1,1,1,1,-1,1,-1,-1,-1,-1,1,1,-1,-1,-1,-1,1,1,-1,-1,-1,-1,1,-1,1,-1,-1,1,-1}//C

{1,1,1,1,1,1,1,-1,-1,-1,-1,1,1,-1,-1,-1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,1,1,-1}//D

{1,1,1,1,1,1,1,-1,1,-1,-1,1,1,-1,1,-1,-1,1,1,-1,1,-1,-1,1,1,-1,1,-1,-1,1}//E

{1,1,1,1,1,1,1,-1,1,-1,-1,-1,1,-1,1,-1,-1,-1,1,-1,1,-1,-1,-1,1,-1,-1,-1,-1,-1}//F

{-1,1,1,1,1,-1,1,-1,-1,-1,-1,1,1,-1,-1,1,-1,1,1,-1,-1,1,1,-1,-1,1,-1,1,1,1}//G

{1,1,1,1,1,1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,1,1,1,1,1}//H

{-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1}//I

{-1,-1,-1,-1,1,-1,1,-1,-1,-1,-1,1,1,1,1,1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}//J

{1,1,1,1,1,1,-1,-1,1,1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1}//K

{1,1,1,1,1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1}//L

{1,1,1,1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,1,-1,-1,-1,-1,1,1,1,1,1,-1}//M

{1,1,1,1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,1,1,1,1,-1}//N

{-1,1,1,1,1,-1,1,-1,-1,-1,-1,1,1,-1,-1,-1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,1,1,-1}//O

{1,1,1,1,1,1,1,-1,1,-1,-1,-1,1,-1,1,-1,-1,-1,1,-1,1,-1,-1,-1,-1,1,-1,-1,-1,-1}//P

{-1,1,1,1,1,-1,1,-1,-1,-1,-1,1,1,-1,-1,1,-1,1,1,-1,-1,-1,1,1,-1,1,1,1,1,1}//Q

{1,1,1,1,1,1,1,-1,1,1,-1,-1,1,-1,1,-1,1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1}//R

{-1,1,1,-1,-1,1,1,-1,-1,1,-1,1,1,-1,-1,1,-1,1,1,-1,-1,1,-1,1,-1,-1,-1,-1,1,-1}//S

{1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1}//T

{1,1

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2