word
word
1 / 12
word
深 圳 大 学 实 验 报 告
实验课程名称: 神经网络与进化算法
实验项目名称: BP神经网络对蝴蝶花%创建神经网络
net = newff( minmax(input) , [3 3] , { 'logsig''logsig' } , 'traingdx' ) ;
%设置训练参数
= 50 ;
= 1500 ;
= ;
= ;
%开始训练
net = train( net, input , output' ) ;
%读取训练数据
[id2 c t1 t2 t3 t4 ] = textread('' , '%f%f%f%f%f%f');
%测试数据归一化
testInput = tramnmx ( [t1,t2,t3,t4]' , minI, maxI ) ;
%仿真
Y = sim( net , testInput )
%取最大者为1的位置作为识别结果
[resultmax,r] = max(Y);
testclass=r'-1;
word
word
6 / 12
word
%统计识别正确率
[s1 , s2] = size( Y ) ;
hitNum = 0 ;
for i = 1 : s2
[m , Index] = max( Y( : , i ) ) ;
if( Index == c(i)+1 )
hitNum = hitNum + 1 ;
end
end
sprintf('ʶ±ðÂÊÊÇ %%%',100 * hitNum / s2 )
%输入到隐层权值
w1={1,1}
%隐层阙值
bias1={1}
%隐层到输出层权值
w2={2,1};
%输出层阙值
bias2={2}
以上程序的识别率稳定在94%左右,训练250次左右达到收敛,训练曲线如如下图所示:
word
word
7 / 12
word
我们也可以用下面的语句来定位有误差的数据:
plot(id2,c) %预测数据
hold on%此命令能使所绘制的图形发生在已有的同一X纸上
plot(id2,testclass)%数据
hold off
word
word
8 / 12
word
本例中我得出的结果是〔训练的结果是不同的〕
输入到隐层的权值:
w1 =
隐层到输出层权值:
w2 =
隐层阙值:
bias1 =
输出层阙值:
bias2 =
结果分析:
我在实验中尝试调整隐含层结点的个数,选择不同的激活函数,设定不同的学习率,说明如下:
<1>隐含层节点个数
隐含层节点的个数对于识别率的影响并不大,但是节点个数过多会增加运算量,使得训练较慢。
<2>激活函数的选择
激活函数无论对于识别率或收敛速度都有显著的影响。在逼近高次曲线时,S形函数精度比线性函数要高得多,但计算量也要大得多。
上面的代码中我用的是'logsig' ' logsig ',识别率只有94%,但我换了'logsig' 'purelin'后发现识别率接近100%。
<3>学习率的选择
学习率影响着网络收敛的速度,以与网络能否收敛。学习率设置偏小可以保证网络收敛,但是收敛较慢。相反,学习率设置偏大如此有可能使网络训练不收敛,影响识别效果。
The table shows the different result
Case
Hidden nodes
Permitted error
Learning rate
Epoch
Accuracy〔100%〕
1
3
1241
2
6
1147
word
word
10 / 12
word
3
9
1067
4
3
1196
5
3
583
6
3
1159
7
3
43
8
3
111
9
3
97
10
6
96
(因
某实验报告材料BP神经网络的(2150230509) 来自淘豆网m.daumloan.com转载请标明出处.