BP神经网络预测 matlab源程序
BP神经网络的数据分类_MATLAB源代码

%%%清除空间clcclear all ;close all ;%%%训练数据预测数据提取以及归一化%%%下载四类数据load data1 c1load data2 c2load data3 c3load data4 c4%%%%四个特征信号矩阵合成一个矩阵data ( 1:500 , : ) = data1 ( 1:500 , :) ;data ( 501:1000 , : ) = data2 ( 1:500 , : ) ;data ( 1001:1500 , : ) = data3 ( 1:500 , : ) ;data ( 1501:2000 , : ) = data4 ( 1:500 , : ) ;%%%%%%从1到2000间的随机排序k = rand ( 1 , 2000 ) ;[ m , n ] = sort ( k ) ; %%m为数值,n为标号%%%%%%%%%%%输入输出数据input = data ( : , 2:25 ) ;output1 = data ( : , 1) ;%%%%%%把输出从1维变到4维for i = 1 : 1 :2000switch output1( i )case 1output( i , :) = [ 1 0 0 0 ] ;case 2output( i , :) = [ 0 1 0 0 ] ;case 3output( i , :) = [ 0 0 1 0 ] ;case 4output( i , :) = [ 0 0 0 1 ] ;endend%%%%随机抽取1500个样本作为训练样本,500个样本作为预测样本input_train = input ( n( 1:1500 , : ) )’ ;output_train = output ( n( 1:1500 , : ) )’ ;input_test = input ( n( 1501:2000 , : ) )’ ;output_test = output ( n( 1501:2000 , : ) )’ ;%%%%输入输出数据归一化[ inputn , inputps ] = mapminmax ( input_train ) ;%%%网络结构初始化innum = 24 ; %输入层midnum = 25 ; %隐含层outnum = 4 ; %输出层%权值初始化w1 = rands ( midnum , innum ) ;b1 = rands ( midnum , 1 ) ;w2 = rands ( midnum , outnum ) ;b2 = rands ( outnum , 1) ;w2_1 = w2 ; w2_2 = w2_1 ;w1_1 = w1 ; w1_2 = w1_1 ;b1_1 = b1 ; b1_2 = b1_1 ;b2_1 = b2 ; b2_2 = b2_1 ;%%%学习速率xite = 0.1 ;alfa = 0.01 ;%%%%%网络训练for ii = 1:10E( ii ) = 0 ;for i = 1:1:1500 ;%%网络预测输出x = inputn ( : , j ) ;%%%隐含层输出for j = 1:1:midnuml (j) = inputn ( : , i )’*w1( j , :)’ + b1 (j) ;lout (j) = 1/( 1 +exp( -1(j) ) ) ;end%%%%输出层输出yn = w2’ * lout’ + b2 ;%%%权值阈值修正%计算权值变化率dw2 = e * lout ;db2 = e’ ;for j = 1:1:midnumS= 1/(1 + exp ( -l(j) ) ) ;Fl (j) = S * ( 1- S) ;endfor k = 1:1:innumfor j = 1:1:midnumdw1( k, j ) = Fl (j) * x (k) *( e(1)*w2( j,1) + e(2)*w2( j,2) + e(3)*w2( j,3) + e(4)*w2( j,4) ) ; db1( j ) = Fl (j) * *( e(1)*w2( j,1) + e(2)*w2( j,2) + e(3)*w2( j,3) + e(4)*w2( j,4) ) ;endendw1=w1_1+xite*dw1';b1=b1_1+xite*db1';w2=w2_1+xite*dw2';b2=b2_1+xite*db2';w1_2=w1_1;w1_1=w1;w2_2=w2_1;w2_1=w2;b1_2=b1_1;b1_1=b1;b2_2=b2_1;b2_1=b2;endend%%%%语音特征信号分类input_test = mapminmax ( ‘apply’ , input_test , inputps ); for ii = 1:1for i = 1:500%隐含层输出for j = 1:1:midnuml (j) = input_te st ( : , i )’ * w1( j , : )’ + b1(j) ;lout ( j ) = 1/ ( 1 + exp( -l(j) ) ) ;endfore( :,i ) = w2’ * lout’ + b2 ;endend%%%结果分析%%%%根据网络输出找出数据属于哪类for i = 1:500output_fore (i) = find ( fore (:,i) = =max (fore(:,i) ) ) ; end%%%%%BP网络预测输出error = output_fore - output1 ( n( 1501:2000) )’ ;%%画出分类图figure (1)plot ( output_fore , ‘r’ )hold onplot (output1( n (1501:2000))’ , ‘b’ ) ;legend ( ‘预测语音类别’, ‘实际语音类别’) %%%画出误差图figure (2)plot (error)title ( ‘BP网络分类误差’, ‘fontsize’, 12 ) xlabel ( ‘语音信号’, ‘fontsize’, ‘12’) ylabel ( ‘分类误差’, ‘fontsize’, 12 ) %%%%%找出属于哪种类型for i = 1:500if error (i) ~= 0[ b,c ] = max (output_test( :,i ) );switch ccase 1k(1) = k(1) + 1 ;case 2k(2) = k(2) + 1 ;case 3k(3) = k(3) + 1 ;case 4k(4) = k(4) + 1 ;endendend%%%%找出每一类的个体总和kk = zeros ( 1,4 )for i = 1:500[ b,c ] = max ( output_test( :,i) ) ; switch ccase 1kk(1) = kk(1) + 1 ;case 2kk(2) = kk(2) + 1 ;case 3kk(3) = kk(3) + 1 ;case 4kk(4) = kk(4) + 1 ;endend%%%正确率nightridio = ( kk - k )./ kk。
基于遗传算法的BP神经网络MATLAB代码

基于遗传算法的BP神经网络MATLAB代码以下是基于遗传算法的BP神经网络的MATLAB代码,包括网络初始化、适应度计算、交叉运算、突变操作和迭代训练等。
1.网络初始化:```matlabfunction net = initialize_network(input_size, hidden_size, output_size)net.input_size = input_size;net.hidden_size = hidden_size;net.output_size = output_size;net.hidden_weights = rand(hidden_size, input_size);net.output_weights = rand(output_size, hidden_size);net.hidden_biases = rand(hidden_size, 1);net.output_biases = rand(output_size, 1);end```2.适应度计算:```matlabfunction fitness = calculate_fitness(net, data, labels)output = forward_propagation(net, data);fitness = sum(sum(abs(output - labels)));end```3.前向传播:```matlabfunction output = forward_propagation(net, data)hidden_input = net.hidden_weights * data + net.hidden_biases;hidden_output = sigmoid(hidden_input);output_input = net.output_weights * hidden_output +net.output_biases;output = sigmoid(output_input);endfunction result = sigmoid(x)result = 1 ./ (1 + exp(-x));end```4.交叉运算:```matlabfunction offspring = crossover(parent1, parent2)point = randi([1 numel(parent1)]);offspring = [parent1(1:point) parent2((point + 1):end)]; end```5.突变操作:```matlabfunction mutated = mutation(individual, mutation_rate) for i = 1:numel(individual)if rand < mutation_ratemutated(i) = rand;elsemutated(i) = individual(i);endendend```6.迭代训练:```matlabfunction [best_individual, best_fitness] =train_network(data, labels, population_size, generations, mutation_rate)input_size = size(data, 1);hidden_size = round((input_size + size(labels, 1)) / 2);output_size = size(labels, 1);population = cell(population_size, 1);for i = 1:population_sizepopulation{i} = initialize_network(input_size, hidden_size, output_size);endbest_individual = population{1};best_fitness = calculate_fitness(best_individual, data, labels);for i = 1:generationsfor j = 1:population_sizefitness = calculate_fitness(population{j}, data, labels);if fitness < best_fitnessbest_individual = population{j};best_fitness = fitness;endendselected = selection(population, data, labels);for j = 1:population_sizeparent1 = selected{randi([1 numel(selected)])};parent2 = selected{randi([1 numel(selected)])};offspring = crossover(parent1, parent2);mutated_offspring = mutation(offspring, mutation_rate);population{j} = mutated_offspring;endendendfunction selected = selection(population, data, labels) fitnesses = zeros(length(population), 1);for i = 1:length(population)fitnesses(i) = calculate_fitness(population{i}, data, labels);end[~, indices] = sort(fitnesses);selected = population(indices(1:floor(length(population) / 2)));end```这是一个基于遗传算法的简化版BP神经网络的MATLAB代码,使用该代码可以初始化神经网络并进行迭代训练,以获得最佳适应度的网络参数。
BP神经网络预测的matlab代码

BP神经网络预测的matlab代码附录5:BP神经网络预测的matlab代码: P=[ 00.13860.21970.27730.32190.35840.38920.41590.43940.46050.47960.49700.52780.55450.59910.60890.61820.62710.63560.64380.65160.65920.66640.67350.72220.72750.73270.73780.74270.74750.75220.75680.76130.76570.7700]T=[0.4455 0.323 0.4116 0.3255 0.4486 0.2999 0.4926 0.2249 0.48930.2357 0.4866 0.22490.4819 0.2217 0.4997 0.2269 0.5027 0.217 0.5155 0.1918 0.5058 0.2395 0.4541 0.2408 0.4054 0.2701 0.3942 0.3316 0.2197 0.2963 0.5576 0.1061 0.4956 0.267 0.5126 0.2238 0.5314 0.2083 0.5191 0.208 0.5133 0.18480.5089 0.242 0.4812 0.2129 0.4927 0.287 0.4832 0.2742 0.5969 0.24030.5056 0.2173 0.5364 0.1994 0.5278 0.2015 0.5164 0.2239 0.4489 0.2404 0.4869 0.2963 0.4898 0.1987 0.5075 0.2917 0.4943 0.2902 ]threshold=[0 1]net=newff(threshold,[11,2],{'tansig','logsig'},'trainlm');net.trainParam.epochs=6000net.trainParam.goal=0.01LP.lr=0.1;net=train(net,P',T')P_test=[ 0.77420.77840.78240.78640.79020.7941 ] out=sim(net,P_test')友情提示:以上面0.7742为例0.7742=ln(47+1)/5因为网络输入有一个元素,对应的是测试时间,所以P只有一列,Pi=log(t+1)/10,这样做的目的是使得这些数据的范围处在[0 1]区间之内,但是事实上对于logsin命令而言输入参数是正负区间的任意值,而将输出值限定于0到1之间。
BP神经网络整定的PID算法-matlab源程序

BP神经网络整定的PID控制算法matlab源程序,系统为二阶闭环系统。
%BP based PID Controlclear all;close all;xite=0.28;alfa=0.001;IN=4;H=5;Out=3;%NN Structurewi=0.50*rands(H,IN);wi_1=wi;wi_2=wi;wi_3=wi;wo=0。
50*rands(Out,H);wo_1=wo;wo_2=wo;wo_3=wo;x=[0,0,0];u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;y_1=0;y_2=0;y_3=0;Oh=zeros(H,1); %Output from NN middle layerI=Oh; %Input to NN middle layererror_2=0;error_1=0;ts=0.01;sys=tf(2。
6126,[1,3。
201,2.7225]);%建立被控对象传递函数dsys=c2d(sys,ts,’z’); %把传递函数离散化[num,den]=tfdata(dsys,'v’);%离散化后提取分子、分母for k=1:1:2000time(k)=k*ts;rin(k)=40;yout(k)=—den(2)*y_1-den(3)*y_2+num(2)*u_2+num(3)*u_3;error(k)=rin(k)-yout(k);xi=[rin(k),yout(k),error(k),1];x(1)=error(k)—error_1;x(2)=error(k);x(3)=error(k)-2*error_1+error_2;epid=[x(1);x(2);x(3)];I=xi*wi’;for j=1:1:HOh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j)));%Middle Layer endK=wo*Oh; %Output Layerfor l=1:1:OutK(l)=exp(K(l))/(exp(K(l))+exp(-K(l)));%Getting kp,ki,kd endkp(k)=K(1);ki(k)=K(2);kd(k)=K(3);Kpid=[kp(k),ki(k),kd(k)];du(k)=Kpid*epid;u(k)=u_1+du(k);if u(k)〉=45 %Restricting the output of controlleru(k)=45;endif u(k)〈=-45u(k)=-45;enddyu(k)=sign((yout(k)—y_1)/(u(k)-u_1+0。
标准的BP神经网络算法程序MATLAB

count=1;
while (count<=maxcount) %结束条件1迭代1000次
c=1;
while (c<=samplenum)
for k=1:outputNums
d(k)=expectlist(c,k); %获得期望输出的向量,d(1:3)表示一个期望向量内 的值
end
break;
end
count=count+1;%训练次数加1
end%第一个while结束
error(maxcount+1)=error(maxcount);
p=1:count;
pp=p/50;
plot(pp,error(p),"-"); %显示误差
deltv(i,j)=alpha*yitay(j)*x(i); %同上deltw
v(i,j)=v(i,j)+deltv(i,j)+a*dv(i,j);
dv(i,j)=deltv(i,j);
end
end
c=c+1;
end%第二个while结束;表示一次BP训练结束
double tmp;
for i=1:inputNums
x(i)=samplelist(c,i); %获得输入的向量(数据),x(1:3)表一个训练向量
字串4
end
%Forward();
for j=1:hideNums
net=0.0;
for i=1:inputNums
net=net+x(i)*v(i,j);
dw=zeros(hideNums,outputNums); %10*3
BP神经网络matlab源程序代码

close allclearecho onclc% NEWFF——生成一个新的前向神经网络% TRAIN——对 BP 神经网络进行训练% SIM——对 BP 神经网络进行仿真% 定义训练样本% P为输入矢量P=[0.7317 0.6790 0.5710 0.5673 0.5948;0.6790 0.5710 0.5673 0.5948 0.6292; ... 0.5710 0.5673 0.5948 0.6292 0.6488;0.5673 0.5948 0.6292 0.6488 0.6130; ...0.5948 0.6292 0.6488 0.6130 0.5654; 0.6292 0.6488 0.6130 0.5654 0.5567; ...0.6488 0.6130 0.5654 0.5567 0.5673;0.6130 0.5654 0.5567 0.5673 0.5976; ...0.5654 0.5567 0.5673 0.5976 0.6269;0.5567 0.5673 0.5976 0.6269 0.6274; ...0.5673 0.5976 0.6269 0.6274 0.6301;0.5976 0.6269 0.6274 0.6301 0.5803; ...0.6269 0.6274 0.6301 0.5803 0.6668;0.6274 0.6301 0.5803 0.6668 0.6896; ...0.6301 0.5803 0.6668 0.6896 0.7497];% T为目标矢量T=[0.6292 0.6488 0.6130 0.5654 0.5567 0.5673 0.5976 ...0.6269 0.6274 0.6301 0.5803 0.6668 0.6896 0.7497 0.8094];% Ptest为测试输入矢量Ptest=[0.5803 0.6668 0.6896 0.7497 0.8094;0.6668 0.6896 0.7497 0.8094 0.8722; ...0.6896 0.7497 0.8094 0.8722 0.9096];% Ttest为测试目标矢量Ttest=[0.8722 0.9096 1.0000];% 创建一个新的前向神经网络net=newff(minmax(P'),[12,1],{'logsig','purelin'},'traingdm');% 设置训练参数net.trainParam.show = 50;net.trainParam.lr = 0.05;net.trainParam.mc = 0.9;net.trainParam.epochs = 5000;net.trainParam.goal = 0.001;% 调用TRAINGDM算法训练 BP 网络[net,tr]=train(net,P',T);% 对BP网络进行仿真A=sim(net,P');figure;plot((1993:2007),T,'-*',(1993:2007),A,'-o');title('网络的实际输出和仿真输出结果,*为真实值,o为预测值');xlabel('年份');ylabel('客运量');% 对BP网络进行测试A1=sim(net,Ptest');figure;plot((2008:2010),Ttest','-*',(2008:2010),A1,'-o');title('测试后网络的实际输出和仿真输出结果,*为真实值,o为预测值'); xlabel('年份');ylabel('客运量');% 计算仿真误差errorE = T - A;MSE=mse(E);figure;plot(1:length(E),E,'-.');title('误差变化图')如有侵权请联系告知删除,感谢你们的配合!。
BP神经网络实验详解(MATLAB实现)

BP神经网络实验详解(MATLAB实现)BP(Back Propagation)神经网络是一种常用的人工神经网络结构,用于解决分类和回归问题。
在本文中,将详细介绍如何使用MATLAB实现BP神经网络的实验。
首先,需要准备一个数据集来训练和测试BP神经网络。
数据集可以是一个CSV文件,每一行代表一个样本,每一列代表一个特征。
一般来说,数据集应该被分成训练集和测试集,用于训练和测试模型的性能。
在MATLAB中,可以使用`csvread`函数来读取CSV文件,并将数据集划分为输入和输出。
假设数据集的前几列是输入特征,最后一列是输出。
可以使用以下代码来实现:```matlabdata = csvread('dataset.csv');input = data(:, 1:end-1);output = data(:, end);```然后,需要创建一个BP神经网络模型。
可以使用MATLAB的`patternnet`函数来创建一个全连接的神经网络模型。
该函数的输入参数为每个隐藏层的神经元数量。
下面的代码创建了一个具有10个隐藏神经元的单隐藏层BP神经网络:```matlabhidden_neurons = 10;net = patternnet(hidden_neurons);```接下来,需要对BP神经网络进行训练。
可以使用`train`函数来训练模型。
该函数的输入参数包括训练集的输入和输出,以及其他可选参数,如最大训练次数和停止条件。
下面的代码展示了如何使用`train`函数来训练模型:```matlabnet = train(net, input_train, output_train);```训练完成后,可以使用训练好的BP神经网络进行预测。
可以使用`net`模型的`sim`函数来进行预测。
下面的代码展示了如何使用`sim`函数预测测试集的输出:```matlaboutput_pred = sim(net, input_test);```最后,可以使用各种性能指标来评估预测的准确性。
求用matlab编BP神经网络预测程序

求用编神经网络预测程序求一用编的程序[。
];输入[。
];输出创建一个新的前向神经网络((),[],{'',''},'')当前输入层权值和阈值{}{}当前网络层权值和阈值{}{}设置训练参数;;;;;调用算法训练网络[]();对网络进行仿真();计算仿真误差;()[。
]'测试()不可能啊我对初学神经网络者的小提示第二步:掌握如下算法:.最小均方误差,这个原理是下面提到的神经网络学习算法的理论核心,入门者要先看《高等数学》(高等教育出版社,同济大学版)第章的第十节:“最小二乘法”。
.在第步的基础上看学习算法、和近邻算法,上述算法都是在最小均方误差基础上的改进算法,参考书籍是《神经网络原理》(机械工业出版社,著,中英文都有)、《人工神经网络与模拟进化计算》(清华大学出版社,阎平凡,张长水著)、《模式分类》(机械工业出版社, . 等著,中英文都有)、《神经网络设计》(机械工业出版社, . 等著,中英文都有)。
(自适应谐振理论),该算法的最通俗易懂的读物就是《神经网络设计》(机械工业出版社, . 等著,中英文都有)的第和章。
若看理论分析较费劲可直接编程实现一下节的算法小节中的算法.算法,初学者若对误差反传的分析过程理解吃力可先跳过理论分析和证明的内容,直接利用最后的学习规则编个小程序并测试,建议看《机器学习》(机械工业出版社, . 著,中英文都有)的第章和《神经网络设计》(机械工业出版社, . 等著,中英文都有)的第章。
神经网络实例()分类:实例采用工具箱函数建立神经网络,对一些基本的神经网络参数进行了说明,深入了解参考帮助文档。
例采用动量梯度下降算法训练网络。
训练样本定义如下:输入矢量为[]目标矢量为[ ]——生成一个新的前向神经网络,函数格式:(,[ ],{ }) ,(对于维输入,是一个的矩阵,每一行是相应输入的边界值)第层的维数第层的传递函数, ''反向传播网络的训练函数, ''反向传播网络的权值阈值学习函数, ''性能函数, ''——对神经网络进行训练,函数格式:(),输入参数:所建立的网络网络的输入网络的目标值,初始输入延迟,初始网络层延迟,验证向量的结构, []测试向量的结构, []返回值:训练之后的网络训练记录(训练次数及每次训练的误差)网络输出网络误差最终输入延迟最终网络层延迟——对神经网络进行仿真,函数格式:[] ()参数与前同。
(整理)BP神经网络matlab实现和matlab工具箱使用实例.

(整理)BP神经网络matlab实现和matlab工具箱使用实例.BP神经网络matlab实现和matlab工具箱使用实例经过最近一段时间的神经网络学习,终于能初步使用matlab实现BP网络仿真试验。
这里特别感谢研友sistor2004的帖子《自己编的BP算法(工具:matlab)》和研友wangleisxcc的帖子《用C++,Matlab,Fortran实现的BP算法》前者帮助我对BP算法有了更明确的认识,后者让我对matlab下BP函数的使用有了初步了解。
因为他们发的帖子都没有加注释,对我等新手阅读时有一定困难,所以我把sistor2004发的程序稍加修改后加注了详细解释,方便新手阅读。
%严格按照BP网络计算公式来设计的一个matlab程序,对BP网络进行了优化设计%yyy,即在o(k)计算公式时,当网络进入平坦区时(<0.0001)学习率加大,出来后学习率又还原%v(i,j)=v(i,j)+deltv(i,j)+a*dv(i,j); 动量项clear allclcinputNums=3; %输入层节点outputNums=3; %输出层节点hideNums=10; %隐层节点数maxcount=20000; %最大迭代次数samplenum=3; %一个计数器,无意义precision=0.001; %预设精度yyy=1.3; %yyy是帮助网络加速走出平坦区alpha=0.01; %学习率设定值a=0.5; %BP优化算法的一个设定值,对上组训练的调整值按比例修改字串9error=zeros(1,maxcount+1); %error数组初始化;目的是预分配内存空间errorp=zeros(1,samplenum); %同上v=rand(inputNums,hideNums); %3*10;v初始化为一个3*10的随机归一矩阵; v表输入层到隐层的权值deltv=zeros(inputNums,hideNums); %3*10;内存空间预分配dv=zeros(inputNums,hideNums); %3*10;w=rand(hideNums,outputNums); %10*3;同Vdeltw=zeros(hideNums,outputNums);%10*3dw=zeros(hideNums,outputNums); %10*3samplelist=[0.1323,0.323,-0.132;0.321,0.2434,0.456;-0.6546,-0.3242,0.3255]; %3*3;指定输入值3*3(实为3个向量)expectlist=[0.5435,0.422,-0.642;0.1,0.562,0.5675;-0.6464,-0.756,0.11]; %3*3;期望输出值3*3(实为3个向量),有导师的监督学习count=1;while (count<=maxcount) %结束条件1迭代20000次c=1;while (c<=samplenum)for k=1:outputNumsd(k)=expectlist(c,k); %获得期望输出的向量,d(1:3)表示一个期望向量内的值endfor i=1:inputNumsx(i)=samplelist(c,i); %获得输入的向量(数据),x(1:3)表一个训练向量字串4end%Forward();for j=1:hideNumsnet=0.0;for i=1:inputNumsnet=net+x(i)*v(i,j);%输入层到隐层的加权和∑X(i)V(i)endy(j)=1/(1+exp(-net)); %输出层处理f(x)=1/(1+exp(-x))单极性sigmiod函数endfor k=1:outputNumsnet=0.0;for j=1:hideNumsnet=net+y(j)*w(j,k);endif count>=2&&error(count)-error(count+1)<=0.0001o(k)=1/(1+exp(-net)/yyy); %平坦区加大学习率else o(k)=1/(1+exp(-net)); %同上endend%BpError(c)反馈/修改;errortmp=0.0;for k=1:outputNumserrortmp=errortmp+(d(k)-o(k))^2; %第一组训练后的误差计算enderrorp(c)=0.5*errortmp; %误差E=∑(d(k)-o(k))^2 * 1/2%end%Backward();for k=1:outputNumsyitao(k)=(d(k)-o(k))*o(k)*(1-o(k)); %输入层误差偏导字串5endfor j=1:hideNumstem=0.0;for k=1:outputNumstem=tem+yitao(k)*w(j,k); %为了求隐层偏导,而计算的∑endyitay(j)=tem*y(j)*(1-y(j)); %隐层偏导end%调整各层权值for j=1:hideNumsfor k=1:outputNumsdeltw(j,k)=alpha*yitao(k)*y(j); %权值w的调整量deltw(已乘学习率)w(j,k)=w(j,k)+deltw(j,k)+a*dw(j,k);%权值调整,这里的dw=dletw(t-1),实际是对BP算法的一个dw(j,k)=deltw(j,k); %改进措施--增加动量项目的是提高训练速度endendfor i=1:inputNumsfor j=1:hideNumsdeltv(i,j)=alpha*yitay(j)*x(i); %同上deltwv(i,j)=v(i,j)+deltv(i,j)+a*dv(i,j);dv(i,j)=deltv(i,j);endendc=c+1;end%第二个while结束;表示一次BP训练结束double tmp;tmp=0.0; 字串8for i=1:samplenumtmp=tmp+errorp(i)*errorp(i);%误差求和endtmp=tmp/c;error(count)=sqrt(tmp);%误差求均方根,即精度if (error(count)<precision)%另一个结束条件< p="">break;endcount=count+1;%训练次数加1end%第一个while结束error(maxcount+1)=error(maxcount);p=1:count;pp=p/50;plot(pp,error(p),"-"); %显示误差然后下面是研友wangleisxcc的程序基础上,我把初始化网络,训练网络,和网络使用三个稍微集成后的一个新函数bpnet %简单的BP神经网络集成,使用时直接调用bpnet就行%输入的是p-作为训练值的输入% t-也是网络的期望输出结果% ynum-设定隐层点数一般取3~20;% maxnum-如果训练一直达不到期望误差之内,那么BP迭代的次数一般设为5000% ex-期望误差,也就是训练一小于这个误差后结束迭代一般设为0.01% lr-学习率一般设为0.01% pp-使用p-t虚拟蓝好的BP网络来分类计算的向量,也就是嵌入二值水印的大组系数进行训练然后得到二值序列% ww-输出结果% 注明:ynum,maxnum,ex,lr均是一个值;而p,t,pp,ww均可以为向量字串1% 比如p是m*n的n维行向量,t那么为m*k的k维行向量,pp为o*i的i维行向量,ww为o* k的k维行向量%p,t作为网络训练输入,pp作为训练好的网络输入计算,最后的ww作为pp经过训练好的BP训练后的输出function ww=bpnet(p,t,ynum,maxnum,ex,lr,pp)plot(p,t,"+");title("训练向量");xlabel("P");ylabel("t");[w1,b1,w2,b2]=initff(p,ynum,"tansig",t,"purelin"); %初始化含一个隐层的BP网络zhen=25; %每迭代多少次更新显示biglr=1.1; %学习慢时学习率(用于跳出平坦区)litlr=0.7; %学习快时学习率(梯度下降过快时)a=0.7 %动量项a大小(△W(t)=lr*X*ん+a*△W(t-1))tp=[zhen maxnum ex lr biglr litlr a 1.04]; %trainbpx[w1,b1,w2,b2,ep,tr]=trainbpx(w1,b1,"tansig",w2,b2,"purelin", p,t,tp);ww=simuff(pp,w1,b1,"tansig",w2,b2,"purelin"); %ww就是调用结果下面是bpnet使用简例:%bpnet举例,因为BP网络的权值初始化都是随即生成,所以每次运行的状态可能不一样。
神经网络预测模型matlab编程

本人编辑了一个预测模型的程序,但是matlab老是提示出错,请各位大虾指教:非常感谢!!!>> clear all;%define the input and outputp= [974 874 527;388 466 1764;1316 2439 2251;1836 2410 1860;1557 2301 1578;1490 1877 2749;1513 1278 2026;1070 1561 2794;1347 2415 3306;1324 2746 1233;1383 1463 1847;1282 0 2347];t=[19797;24282;34548];% 创建bp网络和定义训练函数net=newff([388 3306],[15 1],{'tansig' 'purelin'});net.trainparam.goal=50;net.trainparam.epochs=5000;%训练神经网络[net,tr]=train(net,p,t);%输出训练后的权值和阈值iw1=net.IW{1};b1=net.b{1};lw2=net.LW{2};b2=net.b{2};%存储训练好的神经网络save netkohler net??? Error using ==> network.trainInputs are incorrectly sized for network.Matrix must have 1 rows.修改后:>> clear all;%define the input and outputp= [974 874 527;388 466 1764;1316 2439 2251;1836 2410 1860;1557 2301 1578;1490 1877 2749;1513 1278 2026;1070 1561 2794;1347 2415 3306;1324 2746 1233;1383 1463 1847;1282 0 2347];t=[19797;24282;34548];% 创建bp网络和定义训练函数net=newff([388 1836;466 2746;527 3306],[15 1],{'tansig' 'purelin'});net.trainparam.goal=50;net.trainparam.epochs=5000;%训练神经网络[net,tr]=train(net,p,t);%输出训练后的权值和阈值iw1=net.IW{1};b1=net.b{1};lw2=net.LW{2};b2=net.b{2};%存储训练好的神经网络save netkohler net??? Error using ==> network.trainInputs are incorrectly sized for network.Matrix must have 3 rows.clear all;%define the input and outputp= [974 874 527;388 466 1764;1316 2439 2251;1836 2410 1860;1557 2301 1578;1490 1877 2749;1513 1278 2026;1070 1561 2794;1347 2415 3306;1324 2746 1233;1383 1463 1847;1282 0 2347];t=[19797 24282 34548];% 创建bp网络和定义训练函数pr=[527 974;388 1764;1316 2439;1836 2410;1557 2301;1490 2749;%这里是为了方便而建立一个矩阵,注意是12x2,不是3x21278 2026;1070 2794;1347 3306;1233 2746;1383 1847;0 2347]net=newff(pr,[15,1],{'tansig' 'purelin'},'trainlm');%这里要加入输出层的转移函数,一般是trainlm net.trainparam.goal=50;net.trainparam.epochs=5000;%训练神经网络[net,tr]=train(net,p,t);%输出训练后的权值和阈值iw1=net.IW{1};b1=net.b{1};lw2=net.LW{2};b2=net.b{2};%存储训练好的神经网络save netkohler net。
BP神经网络matlab源程序代码

BP神经网络matlab源程序代码)%******************************%学习程序%******************************%%======原始数据输入========p=[2845 2833 4488;2833 4488 4554;4488 4554 2928;4554 2928 3497;2928 3497 2261;...3497 2261 6921;2261 6921 1391;6921 1391 3580;1391 3580 4451;3580 4451 2636;...4451 2636 3471;2636 3471 3854;3471 3854 3556;3854 3556 2659;3556 2659 4335;...2659 4335 2882;4335 2882 4084;4335 2882 1999;2882 1999 2889;1999 2889 2175;...2889 2175 2510;2175 2510 3409;2510 3409 3729;3409 3729 3489;3729 3489 3172;...3489 3172 4568;3172 4568 4015;]';%===========期望输出=======t=[4554 2928 3497 2261 6921 1391 3580 4451 2636 3471 3854 3556 2659 ... 4335 2882 4084 1999 2889 2175 2510 3409 3729 3489 3172 4568 4015 ... 3666];ptest=[2845 2833 4488;2833 4488 4554;4488 4554 2928;4554 2928 3497;2928 3497 2261;...3497 2261 6921;2261 6921 1391;6921 1391 3580;1391 3580 4451;3580 4451 2636;...4451 2636 3471;2636 3471 3854;3471 3854 3556;3854 3556 2659;3556 2659 4335;...2659 4335 2882;4335 2882 4084;4335 2882 1999;2882 1999 2889;1999 2889 2175;...2889 2175 2510;2175 2510 3409;2510 3409 3729;3409 3729 3489;3729 3489 3172;...3489 3172 4568;3172 4568 4015;4568 4015 3666]';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %将数据归一化NodeNum1 =4; % 隐层第一层节点数NodeNum2=7; % 隐层第二层节点数TypeNum = 5; % 输出维数TF1 = 'tansig';TF2 = 'tansig';TF3 = 'tansig';net=newff(minmax(pn),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建traingdmnet.trainParam.show=50;net.trainParam.epochs=50000; %训练次数设置net.trainParam.goal=1e-5; %训练所要达到的精度net.trainParam.lr=0.01; %学习速率net.trainParam.mc=0.9;net.trainParam.lr_inc=1.05;net.trainParam.lr_dec=0.7;net.trainParam.max_perf_inc=1.04;net=train(net,pn,tn);p2n=tramnmx(ptest,minp,maxp);%测试数据的归一化an=sim(net,p2n);[a]=postmnmx(an,mint,maxt) %数据的反归一化,即最终想得到的预测结果plot(1:length(ttest),ttest,'o',1:length(ttest),a,'+');title('o表示预测值--- *表示实际值')grid on%m=length(a); %向量a的长度%t1=[t,a(m)];error=ttest-a; %误差向量figureplot(1:length(error),error,'-.')title('误差变化图')grid on[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %½«Êý¾Ý¹éÒ»»¯NodeNum1 =4; % Òþ²ãµÚÒ»²ã½ÚµãÊýNodeNum2=7; % Òþ²ãµÚ¶þ²ã½ÚµãÊýTypeNum = 5; % Êä³öάÊýTF1 = 'tansig';TF2 = 'tansig';TF3 = 'tansig';net=newff(minmax(pn),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'trainrp');%ÍøÂç´´½¨traingdmnet.trainParam.show=50;net.trainParam.epochs=50000; %ѵÁ·´ÎÊýÉèÖÃnet.trainParam.goal=1e-5; %ѵÁ·ËùÒª´ïµ½µÄ¾«¶Ènet.trainParam.lr=0.01; %ѧϰËÙÂÊ%net.trainParam.mc=0.9;%net.trainParam.lr_inc=1.05;%net.trainParam.lr_dec=0.7;%net.trainParam.max_perf_inc=1.04;%trainrpnet.trainParam.delt_inc=1.2;net.trainParam.delt_dec=0.5;net.trainParam.delta0=0.07;net.trainParam.deltamax=50.0;net=train(net,pn,tn);p2n=tramnmx(p,minp,maxp);%²âÊÔÊý¾ÝµÄ¹éÒ»»¯an=sim(net,p2n);[a]=postmnmx(an,mint,maxt) %Êý¾ÝµÄ·´¹éÒ»»¯ £¬¼´×îÖÕÏëµÃµ½µÄÔ¤²â½á¹ûplot(1:length(t),t,'o',1:length(a),a,'+');title('o±íʾԤ²âÖµ--- *±íʾʵ¼ÊÖµ')grid on%m=length(a); %ÏòÁ¿aµÄ³¤¶È%t1=[t,a(m)];error=t-a; %Îó²îÏòÁ¿figureplot(1:length(error),error,'-.')title('Îó²î±ä»¯Í¼')grid on%输入参数依次为:'样本P范围',[各层神经元数目],{各层传递函数},'训练函数'%训练函数traingd--梯度下降法,有7个训练参数.%训练函数traingdm--有动量的梯度下降法,附加1个训练参数mc(动量因子,缺省为0.9)%训练函数traingda--有自适应lr的梯度下降法,附加3个训练参数:lr_inc(学习率增长比,缺省为1.05;% lr_dec(学习率下降比,缺省为0.7);max_perf_inc(表现函数增加最大比,缺省为1.04)%训练函数traingdx--有动量的梯度下降法中赋以自适应lr的方法,附加traingdm和traingda 的4个附加参数%训练函数trainrp--弹性梯度下降法,可以消除输入数值很大或很小时的误差,附加4个训练参数:% delt_inc(权值变化增加量,缺省为1.2);delt_dec(权值变化减小量,缺省为0.5);% delta0(初始权值变化,缺省为0.07);deltamax(权值变化最大值,缺省为50.0) % 适合大型网络%训练函数traincgf--Fletcher-Reeves共轭梯度法;训练函数traincgp--Polak-Ribiere共轭梯度法;%训练函数traincgb--Powell-Beale共轭梯度法%共轭梯度法占用存储空间小,附加1训练参数searchFcn(一维线性搜索方法,缺省为srchcha);缺少1个训练参数lr%训练函数trainscg--量化共轭梯度法,与其他共轭梯度法相比,节约时间.适合大型网络% 附加2个训练参数:sigma(因为二次求导对权值调整的影响参数,缺省为5.0e-5);% lambda(Hessian阵不确定性调节参数,缺省为5.0e-7)% 缺少1个训练参数:lr%训练函数trainbfg--BFGS拟牛顿回退法,收敛速度快,但需要更多内存,与共轭梯度法训练参数相同,适合小网络%训练函数trainoss--一步正割的BP训练法,解决了BFGS消耗内存的问题,与共轭梯度法训练参数相同%训练函数trainlm--Levenberg-Marquardt训练法,用于内存充足的中小型网络net=init(net);net.trainparam.epochs=20000; %最大训练次数(前缺省为10,自trainrp后,缺省为100) net.trainparam.lr=0.05; %学习率(缺省为0.01)net.trainparam.show=25; %限时训练迭代过程(NaN表示不显示,缺省为25)net.trainparam.goal=1e-8; %训练要求精度(缺省为0)%net.trainparam.max_fail 最大失败次数(缺省为5)%net.trainparam.min_grad 最小梯度要求(前缺省为1e-10,自trainrp后,缺省为1e-6) %net.trainparam.time 最大训练时间(缺省为inf)[net,tr]=train(net,P,t); %网络训练a=sim(net,H) %网络仿真。
MATLAB程序代码 bp神经网络通用代码

实用标准文案MATLAB程序代码--bp神经网络通用代码matlab通用神经网络代码学习了一段时间的神经网络,总结了一些经验,在这愿意和大家分享一下,希望对大家有帮助,也希望大家可以把其他神经网络的通用代码在这一起分享感应器神经网络、线性网络、BP神经网络、径向基函数网络%通用感应器神经网络。
P=[-0.5 -0.5 0.3 -0.1 -40;-0.5 0.5 -0.5 1 50];%输入向量T=[1 1 0 0 1];%期望输出plotpv(P,T);%描绘输入点图像net=newp([-40 1;-1 50],1);%生成网络,其中参数分别为输入向量的范围和神经元感应器数量hold onlinehandle=plotpc(net.iw{1},net.b{1});net.adaptparam.passes=3;for a=1:25%训练次数[net,Y,E]=adapt(net,P,T);linehandle=plotpc(net.iw{1},net.b{1},linehandle);drawnow;end%通用newlin程序%通用线性网络进行预测time=0:0.025:5;T=sin(time*4*pi);Q=length(T);P=zeros(5,Q);%P中存储信号T的前5(可变,根据需要而定)次值,作为网络输入。
精彩文档.实用标准文案P(1,2:Q)=T(1,1:(Q-1));P(2,3:Q)=T(1,1:(Q-2));P(3,4:Q)=T(1,1:(Q-3));P(4,5:Q)=T(1,1:(Q-4));P(5,6:Q)=T(1,1:(Q-5));plot(time,T)%绘制信号T曲线xlabel('时间');ylabel('目标信号');title('待预测信号');net=newlind(P,T);%根据输入和期望输出直接生成线性网络a=sim(net,P);%网络测试figure(2)plot(time,a,time,T,'+')xlabel('时间');ylabel('输出-目标+');title('输出信号和目标信号');e=T-a;figure(3)plot(time,e)hold onplot([min(time) max(time)],[0 0],'r:')%可用plot(x,zeros(size(x)),'r:')代替hold offxlabel('时间');ylabel('误差');精彩文档.实用标准文案title('误差信号');%通用BP神经网络P=[-1 -1 2 2;0 5 0 5];t=[-1 -1 1 1];net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingd');%输入参数依次为:'样本P范围',[各层神经元数目],{各层传递函数},'训练函数'%训练函数traingd--梯度下降法,有7个训练参数.%训练函数traingdm--有动量的梯度下降法,附加1个训练参数mc(动量因子,缺省为0.9)%训练函数traingda--有自适应lr的梯度下降法,附加3个训练参数:lr_inc(学习率增长比,缺省为1.05;% lr_dec(学习率下降比,缺省为0.7);max_perf_inc(表现函数增加最大比,缺省为1.04)%训练函数traingdx--有动量的梯度下降法中赋以自适应lr的方法,附加traingdm和traingda的4个附加参数%训练函数trainrp--弹性梯度下降法,可以消除输入数值很大或很小时的误差,附加4个训练参数:% delt_inc(权值变化增加量,缺省为1.2);delt_dec(权值变化减小量,缺省为0.5);% delta0(初始权值变化,缺省为0.07);deltamax(权值变化最大值,缺省为50.0)% 适合大型网络%训练函数traincgf--Fletcher-Reeves共轭梯度法;训练函数traincgp--Polak-Ribiere共轭梯度法;%训练函数traincgb--Powell-Beale共轭梯度法%共轭梯度法占用存储空间小,附加1训练参数searchFcn(一维线性搜索方法,缺省为srchcha);缺少1个训练参数lr %训练函数trainscg--量化共轭梯度法,与其他共轭梯度法相比,节约时间.适合大型网络% 附加2个训练参数:sigma(因为二次求导对权值调整的影响参数,缺省为5.0e-5);% lambda(Hessian阵不确定性调节参数,缺省为5.0e-7)% 缺少1个训练参数:lr精彩文档.实用标准文案%训练函数trainbfg--BFGS拟牛顿回退法,收敛速度快,但需要更多内存,与共轭梯度法训练参数相同,适合小网络%训练函数trainoss--一步正割的BP训练法,解决了BFGS消耗内存的问题,与共轭梯度法训练参数相同%训练函数trainlm--Levenberg-Marquardt训练法,用于内存充足的中小型网络net=init(net);net.trainparam.epochs=300; %最大训练次数(前缺省为10,自trainrp后,缺省为100)net.trainparam.lr=0.05; %学习率(缺省为0.01)net.trainparam.show=50; %限时训练迭代过程(NaN表示不显示,缺省为25)net.trainparam.goal=1e-5; %训练要求精度(缺省为0)%net.trainparam.max_fail 最大失败次数(缺省为5)%net.trainparam.min_grad 最小梯度要求(前缺省为1e-10,自trainrp后,缺省为1e-6)%net.trainparam.time 最大训练时间(缺省为inf)[net,tr]=train(net,P,t); %网络训练a=sim(net,P) %网络仿真%通用径向基函数网络——%其在逼近能力,分类能力,学习速度方面均优于BP神经网络%在径向基网络中,径向基层的散步常数是spread的选取是关键%spread越大,需要的神经元越少,但精度会相应下降,spread的缺省值为1%可以通过net=newrbe(P,T,spread)生成网络,且误差为0%可以通过net=newrb(P,T,goal,spread)生成网络,神经元由1开始增加,直到达到训练精度或神经元数目最多为止%GRNN网络,迅速生成广义回归神经网络(GRNN)P=[4 5 6];T=[1.5 3.6 6.7];精彩文档.实用标准文案net=newgrnn(P,T);%仿真验证p=4.5;v=sim(net,p)%PNN网络,概率神经网络P=[0 0 ;1 1;0 3;1 4;3 1;4 1;4 3]';Tc=[1 1 2 2 3 3 3];%将期望输出通过ind2vec()转换,并设计、验证网络T=ind2vec(Tc);net=newpnn(P,T);Y=sim(net,P);Yc=vec2ind(Y)%尝试用其他的输入向量验证网络P2=[1 4;0 1;5 2]';Y=sim(net,P2);Yc=vec2ind(Y)%应用newrb()函数构建径向基网络,对一系列数据点进行函数逼近P=-1:0.1:1;T=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609...0.1336 -0.2013 -0.4344 -0.500 -0.3930 -0.1647 -0.0988...0.3072 0.3960 0.3449 0.1816 -0.0312 -0.2189 -0.3201];%绘制训练用样本的数据点plot(P,T,'r*');title('训练样本');精彩文档.实用标准文案xlabel('输入向量P');ylabel('目标向量T');%设计一个径向基函数网络,网络有两层,隐层为径向基神经元,输出层为线性神经元%绘制隐层神经元径向基传递函数的曲线p=-3:.1:3;a=radbas(p);plot(p,a)title('径向基传递函数')xlabel('输入向量p')%隐层神经元的权值、阈值与径向基函数的位置和宽度有关,只要隐层神经元数目、权值、阈值正确,可逼近任意函数%例如a2=radbas(p-1.5);a3=radbas(p+2);a4=a+a2*1.5+a3*0.5;plot(p,a,'b',p,a2,'g',p,a3,'r',p,a4,'m--')title('径向基传递函数权值之和')xlabel('输入p');ylabel('输出a');%应用newrb()函数构建径向基网络的时候,可以预先设定均方差精度eg以及散布常数sceg=0.02;sc=1; %其值的选取与最终网络的效果有很大关系,过小造成过适性,过大造成重叠性net=newrb(P,T,eg,sc);%网络测试精彩文档.实用标准文案plot(P,T,'*')xlabel('输入');X=-1:.01:1;Y=sim(net,X);hold onplot(X,Y);hold offlegend('目标','输出')%应用grnn进行函数逼近P=[1 2 3 4 5 6 7 8];T=[0 1 2 3 2 1 2 1];plot(P,T,'.','markersize',30)axis([0 9 -1 4])title('待逼近函数')xlabel('P')ylabel('T')%网络设计%对于离散数据点,散布常数spread选取比输入向量之间的距离稍小一些spread=0.7;net=newgrnn(P,T,spread);%网络测试A=sim(net,P);hold onoutputline=plot(P,A,'o','markersize',10,'color',[1 0 0]);精彩文档.实用标准文案title('检测网络')xlabel('P')ylabel('T和A')%应用pnn进行变量的分类P=[1 2;2 2;1 1]; %输入向量Tc=[1 2 3]; %P对应的三个期望输出%绘制出输入向量及其相对应的类别plot(P(1,:),P(2,:),'.','markersize',30)for i=1:3text(P(1,i)+0.1,P(2,i),sprintf('class %g',Tc(i)))endaxis([0 3 0 3]);title('三向量及其类别')xlabel('P(1,:)')ylabel('P(2,:)')%网络设计T=ind2vec(Tc);spread=1;net=newgrnn(P,T,speard);%网络测试A=sim(net,P);Ac=vec2ind(A);%绘制输入向量及其相应的网络输出plot(P(1,:),P(2,:),'.','markersize',30)精彩文档.实用标准文案for i=1:3text(P(1,i)+0.1,P(2,i),sprintf('class %g',Ac(i)))endaxis([0 3 0 3]);title('网络测试结果')xlabel('P(1,:)')ylabel('P(2,:)')P=[13, 0, 1.119, 1, 26.3;22, 0, 1.135, 1, 26.3;-15, 0, 0.9017, 1, 20.4;-30, 0, 0.9172, 1, 26.7;24,0,1.238,0.9704,28.2;3,24,1.119,1,26.3;0,52,1.089,1,26.3;0,-73,1.0889,1,26.3;1,28,0.8748,1,2 6.3;-1,-39,1.1168,1,26.7;-2, 0, 1.495, 1, 26.3;0, -1, 1.438, 1, 26.3;4, 1,0.4964,0.9021, 26.3;3, -1, 0.5533, 1.2357, 26.7;-5, 0, 1.7368, 1, 26.7;1, 0, 1.1045, 0.0202,26.3;-2, 0, 1.1168, 1.3764, 26.7;-3, -1, 1.1655, 1.4418,27.5;3, 2, 1.0875, 0.748, 27.5;-3, 0, 1.1068, 2.2092, 26.3;4, 1, 0.9017, 1, 13.7;3, 2, 0.9017, 1, 14.9;-3, 1, 0.9172, 1, 13.7;-2, 0, 1.0198, 1.0809, 16.1;0, 1, 0.9172, 1, 13.7]T=[1, 0, 0, 0, 0 ;1, 0, 0, 0, 0 ;1, 0, 0, 0, 0 ;1, 0, 0, 0, 0 ;1, 0, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 0, 1;0, 0, 0, 0, 1;0, 0, 0, 0, 1;0, 0, 0, 0, 1;0, 0, 0, 0, 1 ];%期望输出plotpv(P,T);%描绘输入点图像精彩文档.。
bp神经网络进行交通预测的Matlab源代码

bp神经⽹络进⾏交通预测的Matlab源代码bp神经⽹络进⾏交通预测的Matlab源代码2012年01⽉17⽇ [b]%bp神经⽹络进⾏交通预测的Matlab源代码 [/b] [b] % BP 神经⽹络⽤于预测 [/b] [b] % 使⽤平台 - Matlab7.0 [/b] [b] % 数据为1986年到2000年的交通量 ,⽹络为3输⼊,1输出 [/b] [b] % 15组数据,其中9组为正常训练数据,3组为变量数据,3组为测试数据 [/b] [b] %by akjuan [/b] [b] %all rights preserved by [url=][/url] [/b] [b] 08.11 [/b] [b] clc [/b] [b] clear [/b] [b] All_error=[];%所有误差存储 [/b] [b] %------------------------------------------------- -- [/b] [b] %原始数据 [/b] [b] %------------------------------------------------- -- [/b] [b] year=1986:2000;%数据是从1986到2000年的 [/b] [b] p=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;... [/b] [b] 378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;... [/b] [b] 527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';%输⼊数据,共15组,每组3个输⼊ [/b] [b] t=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%输出数据,共15组,每组1个输出 [/b] [b] %------------------------------------------------- -- [/b] [b] %数据归⼀化处理,归⼀化数据到[-1,1],mapminmax函数调⽤形式 [/b] [b] %[y,ps] =%mapminmax(x,ymin,ymax),x需归化的数据输⼊, [/b] [b] %ymin,ymax为需归化到的范围,不填默认为归化到[-1,1] [/b] [b] %返回归化后的值y,以及参数ps,ps在结果反归⼀化中,需要调⽤ [/b] [b] %------------------------------------------------- -- [/b] [b] [normInput,ps] = mapminmax(p); [/b] [b] [normTarget,ts] = mapminmax(t); [/b] [b] %------------------------------------------------- -- [/b] [b] %数据乱序,及分类处理,将输⼊的15组数据,0.2%既3组,⽤来作为测试数据, [/b] [b] % 0.2%既3组,⽤来作为变化数据,另外9组⽤来正常输⼊,⽤来训练 [/b] [b] %DIVIDEVEC⽤来重新随机抽取上述三种分类的数据,原来的顺序被打乱 [/b] [b] %函数调⽤的语法[trainV,valV,testV] = dividevec(p,t,valPercent,testPercent) [/b] [b] %输⼊p为输⼊数据,t为输出数据,valPercent为训练⽤的变化数据在总输⼊中的百分⽐ [/b] [b] %testPercent为训练⽤的测试数据在总输⼊中的百分⽐ [/b] [b] %输出trainV,valV,testV分别为按乱序及相应百分⽐,得到的数据 [/b] [b] %另外,打乱后的数据,p和t都是对应的,请放⼼使⽤ [/b] [b] %------------------------------------------------- -- [/b] [b] testPercent = 0.20; % Adjust as desired [/b] [b] validatePercent = 0.20; % Adust as desired [/b] [b] [trainSamples,validateSamples,testSamples] = dividevec(normInput,normTarget,validatePercent,tes tPercent); [/b] [b] for j=1:200 [/b] [b] %------------------------------------------------- -- [/b] [b] % 设置⽹络参数 [/b] [b] %------------------------------------------------- -- [/b] [b] NodeNum1 = 20; % 隐层第⼀层节点数 [/b] [b] NodeNum2=40; % 隐层第⼆层节点数 [/b] [b] TypeNum = 1; % 输出维数 [/b] [b] TF1 = 'tansig';TF2 = 'tansig'; TF3 = 'tansig';%各层传输函数,TF3为输出层传输函数 [/b] [b] %如果训练结果不理想,可以尝试更改传输函数,以下这些是各类传输函数 [/b] [b] %TF1 = 'tansig';TF2 = 'logsig'; [/b] [b] %TF1 = 'logsig';TF2 = 'purelin'; [/b] [b] %TF1 = 'tansig';TF2 = 'tansig'; [/b] [b] %TF1 = 'logsig';TF2 = 'logsig'; [/b] [b] %TF1 = 'purelin';TF2 = 'purelin'; [/b] [b] net=newff(minmax(normInput),[NodeNum1,NodeNum2,Typ eNum],{TF1 TF2 TF3},'traingdx');%⽹络创建 [/b] [b] %------------------------------------------------- -- [/b] [b] % 设置训练参数 [/b] [b] %------------------------------------------------- -- [/b] [b] net.trainParam.epochs=10000;%训练次数设置 [/b] [b] net.trainParam.goal=1e-6;%训练⽬标设置 [/b] [b] PL.lr=0.01;%学习率设置,应设置为较少值,太⼤虽然会在开始加快收敛速度,但临近最佳点时,会产⽣动荡,⽽致使⽆法收敛[/b] [b] %------------------------------------------------- -- [/b] [b] % 指定训练参数 [/b] [b] % net.trainFcn = 'traingd'; % 梯度下降算法 [/b] [b] % net.trainFcn = 'traingdm'; % 动量梯度下降算法 [/b] [b] % [/b] [b] % net.trainFcn = 'traingda'; % 变学习率梯度下降算法 [/b] [b] % net.trainFcn = 'traingdx'; % 变学习率动量梯度下降算法 [/b] [b] % [/b] [b] % (⼤型⽹络的⾸选算法) [/b] [b] % net.trainFcn = 'trainrp'; % RPROP(弹性BP)算法,内存需求最⼩ [/b] [b] % [/b] [b] % 共轭梯度算法 [/b] [b] % net.trainFcn = 'traincgf'; % Fletcher-Reeves修正算法 [/b] [b] % net.trainFcn = 'traincgp'; % Polak-Ribiere修正算法,内存需求⽐Fletcher-Reeves修正算法略⼤ [/b] [b] % net.trainFcn = 'traincgb'; % Powell-Beal复位算法,内存需求⽐Polak-Ribiere修正算法略⼤ [/b] [b] % (⼤型⽹络的⾸选算法) [/b] [b] %net.trainFcn = 'trainscg'; % Scaled Conjugate Gradient算法,内存需求与Fletcher-Reeves修正算法相同,计算量⽐上⾯三种算法都⼩很多 [/b] [b] % [/b] [b] % net.trainFcn = 'trainbfg'; % Quasi-Newton Algorithms - BFGS Algorithm,计算量和内存需求均⽐共轭梯度算法⼤,但收敛⽐较快 [/b] [b] % net.trainFcn = 'trainoss'; % One Step Secant Algorithm,计算量和内存需求均⽐BFGS算法⼩,⽐共轭梯度算法略⼤ [/b] [b] % [/b] [b] % (中型⽹络的⾸选算法) [/b] [b] %net.trainFcn = 'trainlm'; % Levenberg-Marquardt算法,内存需求最⼤,收敛速度最快 [/b] [b] % [/b] [b] % net.trainFcn = 'trainbr'; % 贝叶斯正则化算法 [/b] [b] % [/b] [b] % 有代表性的五种算法为:'traingdx','trainrp','trainscg','trainoss', 'trainlm' [/b] [b] net.trainfcn='traingdm'; [/b] [b] [net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],vali dateSamples,testSamples); [/b] [b] %------------------------------------------------- -- [/b] [b] % 训练完成后,就可以调⽤sim()函数,进⾏仿真了 [/b] [b] %------------------------------------------------- -- [/b] [b] [normTrainOutput,Pf,Af,E,trainPerf] = sim(net,trainSamples.P,[],[],trainSamples.T);%正常输⼊的9组p数据,BP得到的结果t [/b] [b] [normValidateOutput,Pf,Af,E,validatePerf] = sim(net,validateSamples.P,[],[],validateSamples.T) ;%⽤作变量3的数据p,BP得到的结果t [/b] [b] [normTestOutput,Pf,Af,E,testPerf] = sim(net,testSamples.P,[],[],testSamples.T);%⽤作测试的3组数据p,BP得到的结果t [/b] [b] %------------------------------------------------- -- [/b] [b] % 仿真后结果数据反归⼀化,如果需要预测,只需将预测的数据P填⼊ [/b] [b] % 将获得预测结果t [/b] [b] %------------------------------------------------- -- [/b] [b] trainOutput = mapminmax('reverse',normTrainOutput,ts);%正常输⼊的9组p数据,BP得到的归⼀化后的结果t [/b] [b] trainInsect = mapminmax('reverse',trainSamples.T,ts);%正常输⼊的9组数据t [/b] [b] validateOutput = mapminmax('reverse',normValidateOutput,ts);%⽤作变量3的数据p,BP得到的归⼀化的结果t [/b] [b] validateInsect = mapminmax('reverse',validateSamples.T,ts);%⽤作变量3的数据t [/b] [b] testOutput = mapminmax('reverse',normTestOutput,ts);%⽤作变量3组数据p,BP得到的归⼀化的结果t [/b] [b] testInsect = mapminmax('reverse',testSamples.T,ts);%⽤作变量3组数据t [/b] [b] %绝对误差计算 [/b] [b] absTrainError = trainOutput-trainInsect; [/b] [b] absTestError = testOutput-testInsect; [/b] [b] error_sum=sqrt(absTestError(1).^2+absTestError(2). ^2+absTestError(3).^2); [/b] [b] All_error=[All_error error_sum]; [/b] [b] eps=90;%其为3组测试数据的标准差,或者每个数据偏差在⼀定范围内⽽判别 [/b] [b] if ((abs(absTestError(1))<=30 )&(abs(absTestError(2))<=30)&(abs(absTestError(3))<= 30)|(error_sum<=eps)) [/b] [b] save mynetdata net [/b] [b] break [/b] [b] end [/b] [b] j [/b] [b] end [/b] [b] j [/b] [b] Min_error_sqrt=min(All_error) [/b] [b] testOutput [/b] [b] testInsect [/b] [b] %------------------------------------------------- -- [/b] [b] % 数据分析和绘图 [/b] [b] %------------------------------------------------- -- [/b] [b] figure [/b] [b] plot(1:12,[trainOutput validateOutput],'b-',1:12,[trainInsect validateInsect],'g--',13:15,testOutput,'m*',13:15, testInsect,'ro'); [/b] [b] title('o为真实值,*为预测值') [/b] [b] xlabel('年份'); [/b] [b] ylabel('交通量(辆次/昼夜)'); [/b] [b] figure [/b] [b] xx=1:length(All_error); [/b] [b] plot(xx,All_error) [/b] [b] title('误差变化图') [/b] [b][/b] 训练样本的⽬的是 数学模型的参数,经过训练之后,可以认为你的模型系统确⽴了下来。
用matlab编BP神经网络预测程序

求用matlab编BP神经网络预测程序求一用matlab编的程序P=[。
];输入T=[。
];输出% 创建一个新的前向神经网络net_1=newff(minmax(P),[10,1],{'tansig','purelin'},'traingdm')% 当前输入层权值和阈值inputWeights={1,1}inputbias={1}% 当前网络层权值和阈值layerWeights={2,1}layerbias={2}% 设置训练参数= 50;= ;= ;= 10000;= 1e-3;% 调用 TRAINGDM 算法训练 BP 网络[net_1,tr]=train(net_1,P,T);% 对 BP 网络进行仿真A = sim(net_1,P);% 计算仿真误差E = T - A;MSE=mse(E)x=[。
]';%测试sim(net_1,x)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%不可能啊我200928对初学神经网络者的小提示第二步:掌握如下算法:2.最小均方误差,这个原理是下面提到的神经网络学习算法的理论核心,入门者要先看《高等数学》(高等教育出版社,同济大学版)第8章的第十节:“最小二乘法”。
3.在第2步的基础上看Hebb学习算法、SOM和K-近邻算法,上述算法都是在最小均方误差基础上的改进算法,参考书籍是《神经网络原理》(机械工业出版社,Simon Haykin著,中英文都有)、《人工神经网络与模拟进化计算》(清华大学出版社,阎平凡,张长水著)、《模式分类》(机械工业出版社,Richard O. Duda等著,中英文都有)、《神经网络设计》(机械工业出版社,Martin T. Hargan等著,中英文都有)。
(自适应谐振理论),该算法的最通俗易懂的读物就是《神经网络设计》(机械工业出版社,Martin T. Hargan等著,中英文都有)的第15和16章。
用matlab编BP神经网络预测程序加一个优秀程序

求用matlab编BP神经网络预测程序求一用matlab编的程序P=[。
];输入T=[。
];输出% 创建一个新的前向神经网络net_1=newff(minmax(P),[10,1],{'tansig','purelin'},'traingdm')% 当前输入层权值和阈值inputWeights=net_1.IW{1,1}inputbias=net_1.b{1}% 当前网络层权值和阈值layerWeights=net_1.LW{2,1}layerbias=net_1.b{2}% 设置训练参数net_1.trainParam.show = 50;net_1.trainParam.lr = 0.05;net_1.trainParam.mc = 0.9;net_1.trainParam.epochs = 10000;net_1.trainParam.goal = 1e-3;% 调用TRAINGDM 算法训练BP 网络[net_1,tr]=train(net_1,P,T);% 对BP 网络进行仿真A = sim(net_1,P);% 计算仿真误差E = T - A;MSE=mse(E)x=[。
]';%测试sim(net_1,x) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%不可能啊我200928对初学神经网络者的小提示第二步:掌握如下算法:2.最小均方误差,这个原理是下面提到的神经网络学习算法的理论核心,入门者要先看《高等数学》(高等教育出版社,同济大学版)第8章的第十节:“最小二乘法”。
3.在第2步的基础上看Hebb学习算法、SOM和K-近邻算法,上述算法都是在最小均方误差基础上的改进算法,参考书籍是《神经网络原理》(机械工业出版社,Simon Haykin著,中英文都有)、《人工神经网络与模拟进化计算》(清华大学出版社,阎平凡,张长水著)、《模式分类》(机械工业出版社,Richard O. Duda等著,中英文都有)、《神经网络设计》(机械工业出版社,Martin T. Hargan等著,中英文都有)。