人工神经网络设计课程报告byhhuWord文档下载推荐.docx
- 文档编号:833704
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:40
- 大小:235.18KB
人工神经网络设计课程报告byhhuWord文档下载推荐.docx
《人工神经网络设计课程报告byhhuWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《人工神经网络设计课程报告byhhuWord文档下载推荐.docx(40页珍藏版)》请在冰点文库上搜索。
在对字母进行识别之前,需要将字母进行预处理,即将待识别的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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工 神经网络 设计 课程 报告 byhhu