MATLAB中训练LM算法的BP神经网络

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB中训练LM算法的BP神经网络相关的知识,希望对你有一定的参考价值。

我用MATLAB仿真基于LM算法的BP神经网络训练,为什么学习率、激发函数等参数都不改变的情况下,每次训练结果的误差及训练次数都不一样呢?是否因为是初始阈值等产生的?要怎么样才能解决这个问题?另外,若改变隐层节点数,也要求在同样的条件下进行网络性能对比,要怎么做?谢谢
谢谢 煌兮诸火的答复,
问题找到了,可能是归一化公式premnmx中min和max的问题,很多文献中都说测试数据的归一化也用训练数据归一化时得出的min和max值,用了tramnmx导致测试数据输出结果错的离谱。在现在的程序中不使用tramnmx,而是在训练时,用premnmx归一化,训练网络的误差达到1e-5,再对测试数据用premnmx进行归一化得出另一组min和max值,通过训练好的网络进行结果运算后,再用postmnmx(A2,mint,maxt)【mint和maxt为测试数据归一化时得出的最小最大值;A2为测试输入通过网络得出的输出】对输出进行处理后,得出的结果与测试集的期望输出比较,但误差并未达到1e-5,但是误差绝对值都小于1,不知有何问题?
1、训练数据回代入网络测试,比上面说的另外测试数据测试误差要小很多,虽然也没有达到1e-5这么小,不知为何?
2、[net,tr]=train(net,Pn,Tn); %训练后,网络误差达到1e-5停止
A=sim(net,Pn);
E=A-Tn;
执行后,为何E中每个值并不是1e-5的数量级,最小的为0.0001,最大的可以达到0.0191呢?
谢谢

1.初始权值不一样,如果一样,每次训练结果是相同的
2.是
3.在train之前修改权值,IW,LW,b,使之相同
4.取多次实验的均值
一点浅见,仅供参考

训练误差是否降到一定范围内,比如1e-3,
将训练样本回代结果如何,
训练样本进行了预处理,比如归一化,而测试样本未进行同样的处理

这样的归一化似有问题,我也认为“测试数据的归一化也用训练数据归一化时得出的min和max值”,
请参考这个帖子http://www.ilovematlab.cn/thread-27021-1-1.html
测试数据带入训练好的神经网络误差当然不会达到1e-5,这是预测啊。
但将训练数据带入误差必然是1e-5,算法终止就是因为达到这个误差才终止,这个误差是由训练数据的输入、输出以及神经网络的权值、激活函数共同决定的,神经网络训练完后,权值、激活函数定了,同样的数据再代入神经网络,误差会不等于1e-5?
第二个问题:不可能每个值都达到1e-5,1e-5是MSE(mean square error),它们的平方和除以总数再开方,mse(E)必为1e-5
另外,LM算法虽然训练最快,但是预测精度一般不好,不如gdm,gdx
参考技术A 1.初始权值不一样,如果一样,每次训练结果是相同的
2.是
3.在train之前修改权值,IW,LW,b,使之相同
4.取多次实验的均值
一点浅见,仅供参考

matlab遗传算法改进bp神经网络

代码如下: 因为精度不高 所以想用遗传算法改进 请大神指教
NUM=21;%样本个数

%读入神经网络的输入,存入数组P(材质的渲染参数)
input=fopen('input-p.txt','r');
tline1=fgets(input);
P=zeros(5,NUM);
for i=1:NUM
fscanf(input,'%f',2);
for j=1:5
P(j,i)=fscanf(input,'%f',1);
end;
end;
fclose(input);

%读入神经网络的输出,存入数组T(材质的主观评价)
output=fopen('output-t.txt','r');
tline2=fgets(output);
T=zeros(5,NUM);
for i=1:NUM
fscanf(output,'%f',1);
for j=1:5
T(j,i)=fscanf(output,'%f',1);
end;
end;
fclose(output);

%建立一个神经网络
net=newff(minmax(P),[10,5],'tansig','purelin','traingdm');

net.trainParam.epochs=500;%每计算1000次显示一次数据
net.trainParam.goal=1e-1;%给定训练的目标误差

%训练神经网络
[net,tr]=train(net,P,T);

A=sim(net,P);
E=T-A;
MSE=mse(E)
close all;
plot(P,A,'+',P,T,'*');

你提供的代码是一个基本的BP神经网络训练过程。一般都是用GA训练,之后再用改进动量法继续训练,直至最后达到目标。

遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。

参考技术A 什么问题呢

以上是关于MATLAB中训练LM算法的BP神经网络的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB中BP神经网络的训练算法具体是怎么样的

用Matlab算BP神经网络的具体算法?

MATLAB中BP神经网络的训练算法具体是怎么样的

BP神经网络的模型已经训练好,想用多一些数据继续训练,怎么在原来的基础上训练呢?

数据预测基于matlab鸟群算法优化BP神经网络数据预测含Matlab源码 1772期

matlab遗传算法改进bp神经网络