statax
我执行了约10多次,有两个结果是拟合得很好的, 而发现这两个结果重复了几次. 所以我顶楼说的不完全是事实, 其实是可以重复的,只是, 结果有很多种, 恰好重复出现的可能性也是存在的. 我现在已经保存了那两个较好的结果的了.
现在我又限入了新的问题, 就是, 用 Matlab仿真得出的结果很好, 但我将其权值和阀值取出来, 自己在 Excel 重新计算时, 却得不到和Matlab 一样的结果, 不知道为什么, 可能是我的计算错了?
我用的是一个三层的BP网, 第一层输入向量有两个元素, 第二层(隐层)有四个神经元, 输入到隐层采用的激法函数是最常用的 sigmoid (即f=1/(1+exp(-x))), 第三层,即输出层只有一个元素, 隐层到输出层为pureline 纯线性函数.
以下是我的第一层到隐层的权重矩阵和阀值向量:
iw1 =
-3.7592 -4.1201
-4.8433 -2.5710
-2.7480 4.8027
4.6575 -3.1063
b1 =
6.7790
4.8607
-2.2615
2.0206
隐层到输出层的 权重向量和阀值:
lw1 =
-0.2605 -0.1261 0.2162 0.5579
b2 =
0.1820
=================================
当输入为p1=[0.1;0.1] 列向量时,
>> sim(net,p1)
ans =
0.1299
但我用在Excel里算出来的是 0.669607762
我想我肯定算错了, 但不知错在什么地方. 复杂的原因是, 在Excel 里矩阵经过两次变换容易算错, 但是在Matlab里,不知怎么用Sigmoid函数进行矩阵运算, 我是直接在Excel 里对矩阵的每一个分量进行Sigmoid变换的.
请大家用我给出的 两组权重和阀值 iw1, b1和 lw1, b2, 以及输入向量 p1, 激法函数sigmoid和pureline计算一下仿真结果, 用Excel 为什么就算不出来呢?
谢谢.. 我必须用Excel 计算一次, 因为我需要用到这个结构在Excel里来做一些其他分析...
statax
我还是在Matlab中做了一下, 是手动地根据权值和阀值计算的, 不知为什么还是不对, 请大家看看.
程序为(如4楼所述,其中权值和阀值为训练好了的),
iw1 %显示隐层权重
b1 %显示隐层阀值
lw1 %显示输出层权重
b2 %显示输出层阀值
p1 %显示输入向量
I=ones(4,1) %生成一个4维的元素全为1的列向量
d=I./(I+exp(-(iw1*p1+b1))) %计算隐层激活函数值
e=lw1*d+b2 %计算最终输出仿真值
运行结果:
>
iw1 =
-3.7592 -4.1201
-4.8433 -2.5710
-2.7480 4.8027
4.6575 -3.1063
b1 =
6.7790
4.8607
-2.2615
2.0206
lw1 =
-0.2605 -0.1261 0.2162 0.5579
b2 =
0.1820
p1 =
0.1000
0.1000
I =
1
1
1
1
d =
0.9975
0.9840
0.1134
0.8980
e =
0.3236
===========================
当输入为p1=[0.1;0.1] 列向量时,
>> sim(net,p1)
ans =
0.1299
还是无法和调用sim()函数计算的结果相一致.