1最近看神经网络的书籍时,看了论坛的一些相关帖子,可是还是有些地方不太明白,感觉很多训练函数参数的解释都是一笔带过,我这个初学者有点难理解,epochs是最大训练次数,能否说也是迭代次数,即重复循环次数。
lr学习率怎么理解呢?特别是它的数字代表的什么意思呢?能否举例说明,谢谢。
min_grad最小梯度要求,针对的是所有函数的梯度?关于梯度这里也有点迷糊,网上把梯度当成导数理解,这样合适吗?还有梯度的计算,为什么要计算梯度呢?这里的梯度指的是所有传递函数的梯度?show显示训练迭代过程,50就代表每隔50次训练,显示一次训练进程,这样理解合适吗?以怎样的方式显示呢?是不是performance每隔50取一个点再连接起来?问题比较基础,也比较多,因为小弟初学者,还请多多理解。
谢谢耐心的你,回答我的问题1.epochs理解为最大迭代次数是没问题的2.lr是学习率,这是权值调整过程中用到的一个参数,具体含义还需从权值调整的原理说起3.梯度和学习率一样,如果对算法原理不了解,很难解释清楚4.关于show你的理解是正确的对于梯度下降可以理解为每次权值和阀值的修改量大小,改动太小了,就可以认为网络收敛,可以停止训练了2请问:用matlab初始化PSO算法的v、x时,一下这两种方式应该都差不多吗?1.v=rand(N,D,1)2. 用for循环赋值:x(i,j)=rand 我在程序中试过最后结果都是N*D 的随机矩阵,是不是方法2用for略显繁琐些呢?曾经看过帖子,有人说在matlab下乱用for 循环是没有充分利用matlab的矩阵功能,所以我想,是不是在matlab下用1更好些呢?两种方法是完全一样的,第一种没有用循环,所以效果更好点,用循环会增加程序的运行时间3请教个问,要得急下图是两类样本,红色的是一类,蓝色的是一类,这样的样本能用吗?楼主能具体解释下数据不,神经网络预测的精确与否与数据有比较大的关系,简单来说,就是输入数据和输出数据存在关联性,因为网络本身可以看成是一个函数的4发表于 2009-11-6 09:07:31 |只看该作者|倒序浏览您好史老师,我以前用的是工具箱中newff,train,sim。
样本就是这些,训练精度达人满意的效果。
现在自已写程序能否达到这个效果?我的样本是实际测量得出的。
而且样本的数目根据实际情况已经不可能再增加.谢谢中午回去给你试下,不过你的数据里面只有训练数据了,没有测试数据了,一般工具箱函数精度高很多,我自己做的BP程序也存在预测效果稍差的问题楼主的问题解决了,应该是加上阀值,不是减阀值,正好反了,另外,建议楼主把输入数据归一化,输出归一不归一无所谓5 L=[1 2 3 4;567 8;9 10 11 12]L =1 2 3 45 6 7 89 10 11 12>> std=corrcoef(L)%相关系数std =1 1 1 11 1 1 11 1 1 11 1 1 1>> covL=cov(L)%协方差covL =16 16 16 1616 16 16 1616 16 16 1616 16 16 16[本帖最后由niuniuyun 于2009-10-26 17:27 编辑]6很多自变量,一个因变量,如何用神经网络进行变量选择,找出和因变量最相关的几个自变量?用哪些神经网络好呢?原帖由史峰于 2009-10-15 17:32 发表你好,BP和RBF等都应该可以,各种网络间差异应该不是很大,楼主的问题的具体是怎样的呢,能详细描述一下吗,比如数据的输入输出,训练集等等一共有644个自变量,一个因变量。
要在这644个自变量中选择和因变量最相关的。
问题就是这样。
pca好像能做。
神经网络也可以,可是不知道如何下手。
这个得具体问题具体分析,大体的思路是将所有自变量进行分组,所有分组的组合构成搜索空间,利用遗传算法找到最优的分组组合,对应的自变量就是筛选出来的输入变量7 for i=1:nReptnet = newff(p_z,t_z,n,{'tansig','purelin'},'traingdx');%net = newff(minmax(p_z),[n,1],{'tansig','purelin'},'traingdx');% 初始化网络%网络设置yers{1}.initFcn = 'initnw';net.inputWeights{1,1}.initFcn = 'rands';net.biases{1,1}.initFcn = 'rands';net = init(net);% 训练网络net.trainParam.show=100;net.trainParam.mc=0.3;net.trainParam.epochs=2000;net.trainParam.goal=1e-5;[net,tr]=train(net,p_z,t_z);%调用TRAINGDX算法训练BP网络%对BP网络进行仿真temp=sim(net,p_sim_z);re = mapminmax('reverse',temp,TS);sum=re;%echo offend;例子如上,请问如何保存所有神经网络模型,好做为以后预测用?采用元胞数组,比如训练好一个网络net,设定一个元胞数组a=cell(1,5),a{1}=net,用该网络预测用sim(a{1},-)就可以8 用PSO优化BP网络似乎效果比单纯用BP也没有太大改观啊,不知道大家仿真后效果如何?有的时候好像还不如bp训练的效果呀,该怎么调整呢?我的数据是4×74的矩阵,(74个采样时间),输出是1×74的量,网络结构是4-5-1、40/60/80个粒子都试过了200次左右的迭代。
是不是样本少了呀?,单独用BP时一开始用的是37个采样时间的数值,拟合不是很好,后来又选了些数据,到74个采样点是,效果就很好了,同样的数据,用PSO优化该网络后的效果反而不怎么样了,还需要注意什么问题吗?谢谢诸位!是数据比较少,所以网络本身没有学习充分,加上优化方法后,虽然训练精确了,但是等于过拟合了,预测效果反而更差,楼主可以多找点数据,并且这个问题不少文献都有问题的9 您好,各位老师:我用GUI进行神经网络的编写,以前一直用的是神经网络工具箱中的newff,train,sim 函数。
这次在GUI里也是用这几个。
在未编译前运行正常。
可是编译成exe后,却不可以用了。
怎么解决?盼指教!神经网络工具箱不可用于exe文件,的确需要用的话需要自己神经网络程序10 已答复]问题——Matlab的神经网络预测误差比较大,该怎样调整各位前辈:你们好!我刚刚接触神经网络不久,在用BP网络和RBF网络来进行预测时,得到的结果误差比较大。
BP网络,我也调整了很多次隐层单元个数和训练的次数,可是总是无法得到较为精确地结果;RBF我也调整了很多SPREAD值,结果也很不理想!如果不是数据的原因,我想知道我的程序有哪些不足之处和需要改进的地方!希望各位前辈能帮我修改一下,并帮我指出一下。
我在此表示真诚的感谢!代码我一起发过去!还有一个问题,因为网络每次训练的结果不一样,我想把其中的一次保存起来,下次训练时得到相同的结果,我应该怎么办?(我用过save filename net 和load filename net,可不知道该放在程序什么位置)非常期待各位的回音!谢谢大家了!不好意思,我不应该添加附件的,让大家花M币BP代码:clc;clear;close all;%输入样本数据,前十组用来作训样本练,后面四组用来预测p=[308.5 449.9 1104.6 870.4 25.7;68 70 330.2 58.5 19.4;133.3 216.4 1572.5 1311.6 25.9;151.8 215.2 1155.5 859.4 24.1;69.8 82.1 517.5 107.9 18;82.8 171.6 1102.4 780.7 27.6;139.8 199 802.1 478.1 25.7;61.7 99.1 541.3 102.9 19.7;266.6 310.8 1850.2 1588.1 27;98 111.7 968.6 739.8 26.1;157.5 281.1 911.9 415.6 20.2;119.8 268.9 1593.3 1291.3 28;28.1 44.5 618.9 367.9 27.4;321 494.7 1364.1 1062.8 27.9]';%目标向量t=[12.14 5.48;6.8 11.58;7.45 8.29;7.3 2.17;2.353.02;2.25 0.29;5.26 3.9;3.37 1.7;30.64 27.25;10.11 7.52;2.79 2.27.78 4.741.57 0.5413.25 6.58 ]';%输入向量归一for i=1:5P(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));end%目标向量归一for i=1:2T(i,:)=(t(i,:)-min(t(i,:)))/(max(t(i,:))-min(t(i,:)));end%学习样本P_train=[P(:,1) P(:,2) P(:,3) P(:,4) P(:,5) P(:,6) P(:,7) P(:,8) P(:,9) P(:,10)]; T_train=[T(:,1) T(:,2) T(:,3) T(:,4) T(:,5) T(:,6) T(:,7) T(:,8) T(:,9) T(:,10)]; %测试样本P_test=[P(:,11) P(:,12) P(:,13) P(:,14) ];T_test=[T(:,11) T(:,12) T(:,13) T(:,14) ];%隐层单元个数向量为15net=newff(minmax(P),[15,2],{'tansig','logsig'});net.trainParam.epochs=500;net=init(net);net=train(net,P_train,T_train);Temp=sim(net,P_test);y(1,:)=Temp(1,:);y(2,:)=Temp(2,:);Y1=[y(1,:);y(2,:)];%求预测误差,画出误差曲线for i=1:4error1(i)=norm(Y1(:,i)-T_test(:,i));endfigure;plot(1:4,error1);hold off;for i=1:2%反归一化TT(i,:)=Temp(i,:)*(max(t(i,:))-min(t(i,:)))+min(t(i,:)); endfor i=1:2T2(i,:)=T(i,:)*(max(t(i,:))-min(t(i,:)))+min(t(i,:)); endRBF代码:clc;clear;close all;%输入样本数据,前十组用来作训样本练,后面四组用来预测p=[308.5 449.9 1104.6 870.4 25.7;68 70 330.2 58.5 19.4;133.3 216.4 1572.5 1311.6 25.9;151.8 215.2 1155.5 859.4 24.1;69.8 82.1 517.5 107.9 18;82.8 171.6 1102.4 780.7 27.6;139.8 199 802.1 478.1 25.7;61.7 99.1 541.3 102.9 19.7;266.6 310.8 1850.2 1588.1 27;98 111.7 968.6 739.8 26.1;157.5 281.1 911.9 415.6 20.2;119.8 268.9 1593.3 1291.3 28;28.1 44.5 618.9 367.9 27.4;321 494.7 1364.1 1062.8 27.9]';%目标向量t=[12.14 5.48;6.8 11.58;7.45 8.29;7.3 2.17;2.353.02;2.25 0.29;5.26 3.9;3.37 1.7;30.64 27.25;10.11 7.52;2.79 2.27.78 4.741.57 0.5413.25 6.58 ]';%归一化的输入向量for i=1:5P(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));endfor i=1:2T(i,:)=(t(i,:)-min(t(i,:)))/(max(t(i,:))-min(t(i,:)));end%学习样本P_train=[P(:,1) P(:,2) P(:,3) P(:,4) P(:,5) P(:,6) P(:,7) P(:,8) P(:,9) P(:,10)]; T_train=[T(:,1) T(:,2) T(:,3) T(:,4) T(:,5) T(:,6) T(:,7) T(:,8) T(:,9) T(:,10)]; %测试样本P_test=[P(:,11) P(:,12) P(:,13) P(:,14) ];T_test=[T(:,11) T(:,12) T(:,13) T(:,14) ];%建立网络net=newrbe(P_train,T_train,1);temp=sim(net,P_test);y(1,:)=temp(1,:);y(2,:)=temp(2,:);Y1=[y(1,:);y(2,:)];temp=sim(net,P_test)%求预测误差for i=1:4error1(i)=norm(Y1(:,i)-T_test(:,i));endfigure;plot(1:4,error1,'--');hold on;史峰程序没问题,数据太少了,需要保存网络用save net就可以,下次需要使用用load net,然后用sim(net)save net 放在程序快结尾的地方,load net放在下次要调用该保存过的网络时,程序开始的地方,你可以选很多次训练下来,结果好的那个网络拟合其他数据,呵呵,很好用的!象前面几位老师说的,你的数据是太少了。