matlab bp神经网络 精度低>> p=[14.8 25 32.1;25 32.1 38;32.1 38 52;38 52 53.2;52 53.2 54;53.2 54 58;54 58 68.1;58 68.1 86;68.1 86 90.1;86 90.1 100;90.1 100 105.0;100 105.0 107.3;105.0 107.3 108.6;107.3 108.6 109.7;108.6 109.7 110.2;109.7 110.2 1

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/27 21:46:28

matlab bp神经网络 精度低>> p=[14.8 25 32.1;25 32.1 38;32.1 38 52;38 52 53.2;52 53.2 54;53.2 54 58;54 58 68.1;58 68.1 86;68.1 86 90.1;86 90.1 100;90.1 100 105.0;100 105.0 107.3;105.0 107.3 108.6;107.3 108.6 109.7;108.6 109.7 110.2;109.7 110.2 1
matlab bp神经网络 精度低
>> p=[14.8 25 32.1;
25 32.1 38;
32.1 38 52;
38 52 53.2;
52 53.2 54;
53.2 54 58;
54 58 68.1;
58 68.1 86;
68.1 86 90.1;
86 90.1 100;
90.1 100 105.0;
100 105.0 107.3;
105.0 107.3 108.6;
107.3 108.6 109.7;
108.6 109.7 110.2;
109.7 110.2 112.6;
110.2 112.6 133.5;
112.6 133.5 148.6;
133.5 148.6 178.0;
148.6 178.0 200.0]';
>> t=[38 52 53.2 54 58 68.1 86 90.1 100 105 107.3 108.6 109.7 110.2 112.6 133.5 148.6 178 200 222];
>> u=p;
>> tt=t;
>> [p,minp,maxp,t,mint,maxt]=premnmx(p,t)
>> net=newff([-1 1;-1 1;-1 1],[7,1],{'tansig','logsig'},'traingd');
>> net.trainParam.show=1000;
>> net.trainParam.Lr=0.01;
>> net.trainParam.epochs=500000;
>> net.trainParam.goal=10^(-4);
>> net=train(net,p,t)
为什么跑50w次精度都还是很低?

matlab bp神经网络 精度低>> p=[14.8 25 32.1;25 32.1 38;32.1 38 52;38 52 53.2;52 53.2 54;53.2 54 58;54 58 68.1;58 68.1 86;68.1 86 90.1;86 90.1 100;90.1 100 105.0;100 105.0 107.3;105.0 107.3 108.6;107.3 108.6 109.7;108.6 109.7 110.2;109.7 110.2 1

首先是我不知道你用的matlab是什么版本.

如果用的2010以后的版本,那么你这样初始化神经网络一定会报警告.

2010版以后初始化神经网络的语句是这样的

net = newff(p, t, 7);

输出层不需要自己去告诉系统.

我想知道的第二个问题,是你的输出层函数是否需要使用logsig.如果使用purelin,那么你大可不必去归一化.后面我会告诉你原因.

你手动指定了训练次数,但是学习率0.01这个数值不知道你从哪里找到的.我可能会选择高一点的学习率,最高我用过0.25.

训练函数你也是手动指定的,这个是需要的么?如果不需要,对于7个神经节点,完全可以使用trainlm,这样你也不需要这么多的训练次数.


下面说一下2010以后的matlab中,神经网络训练增加的一个功能.在初始化神经网络以后,有一个默认的dividing function,将训练样本中的一部分用来校验神经网络性能,以防止过度训练.那么这个参数可能会导致训练不充分.在初始化神经网络以后,需要做的工作是设定net.divideFcn = '';用来去掉这个分配函数.

如果你需要更改你的transfer function,那么可以在net.layers{2}.transferFcn = 'logsig'将输出层传输函数手动修改.


那么,我使用全默认设置,没有进行归一化处理,获得的结果是这样的.

这个就是把你的t和训练后的神经网络计算的结果放在一起.结果已经很不错了.

如过我去掉了分配函数,那么神经网络就会一直训练到训练次数上限或者达到目标值.165次训练后,误差值是1.77e-19(误差使用mean squared error计算),结果在这里贴出来已经没意义了,因为几乎没有误差.

如果你还有问题,那么跟我细聊一下.