话不多说,直接分享几个可执行的神经网络代码,仅供学习交流

%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 =20; % 隐层第一层节点数 
NodeNum2=40;   % 隐层第二层节点数 

TypeNum = 1;   % 输出维数  
TF1 = 'tansig';
TF2 = 'tansig'; 
TF3 = 'tansig';
net=newff(minmax(pn),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');
%网络创建traingdm 
net.trainParam.show=50; 
net.trainParam.epochs=50000; %训练次数设置 
net.trainParam.goal=1e-5; %训练所要达到的精度
net.trainParam.lr=0.01;   %学习速率      
net=train(net,pn,tn);

MATLAB BP神经网络原始代码 matlab神经网络源代码_matlab

%---------------------------------------------------
% 设置训练参数
%---------------------------------------------------   
%net.trainParam.epochs=10000;%训练次数设置
%net.trainParam.goal=1e-6;%训练目标设置
%PL.lr=0.01;%学习率设置,应设置为较少值,太大虽然会在开始加快收敛速度,但临近最佳点时,会产生动荡,而致使无法收敛
%---------------------------------------------------
% 指定训练参数

% net.trainFcn = 'traingd'; % 梯度下降算法
% net.trainFcn = 'traingdm'; % 动量梯度下降算法
%
% net.trainFcn = 'traingda'; % 变学习率梯度下降算法
% net.trainFcn = 'traingdx'; % 变学习率动量梯度下降算法
%
% (大型网络的首选算法)
% net.trainFcn = 'trainrp'; % RPROP(弹性BP)算法,内存需求最小
%
% 共轭梯度算法
% net.trainFcn = 'traincgf'; % Fletcher-Reeves修正算法
% net.trainFcn = 'traincgp'; % Polak-Ribiere修正算法,内存需求比Fletcher-Reeves修正算法略大
% net.trainFcn = 'traincgb'; % Powell-Beal复位算法,内存需求比Polak-Ribiere修正算法略大
% (大型网络的首选算法)
%net.trainFcn = 'trainscg'; % Scaled Conjugate Gradient算法,内存需求与Fletcher-Reeves修正算法相同,计算量比上面三种算法都小很多
%
% net.trainFcn = 'trainbfg'; % Quasi-Newton Algorithms - BFGS Algorithm,计算量和内存需求均比共轭梯度算法大,但收敛比较快
% net.trainFcn = 'trainoss'; % One Step Secant Algorithm,计算量和内存需求均比BFGS算法小,比共轭梯度算法略大
%
% (中型网络的首选算法)
%net.trainFcn = 'trainlm'; % Levenberg-Marquardt算法,内存需求最大,收敛速度最快
%
% net.trainFcn = 'trainbr'; % 贝叶斯正则化算法
%
% 有代表性的五种算法为:'traingdx','trainrp','trainscg','trainoss', 'trainlm'

%net.trainfcn='traingdm';
%[net,tr] = train(net,trainSamples.P,trainSamples.T,[],[],validateSamples,testSamples);

%---------------------------------------------------
% 训练完成后,就可以调用sim()函数,进行仿真了
%---------------------------------------------------
p2n=tramnmx(ptest,minp,maxp);%测试数据的归一化
an=sim(net,p2n);

[a]=postmnmx(an,mint,maxt)   %数据的反归一化 ,即最终想得到的预测结果


plot(1:length(t),t,'o',1:length(t)+1,a,'+'); 
title('O表示预测值---+表示实际值')
grid on
m=length(a);    %向量a的长度
t1=[t,a(m)];
error=t1-a;     %误差向量
figure
plot(1:length(error),error,'-.') 
title('误差变化图') 
grid on

MATLAB BP神经网络原始代码 matlab神经网络源代码_神经网络_02


MATLAB BP神经网络原始代码 matlab神经网络源代码_数学建模_03

clc,clear,clf
P=[0   0   0   0   0   0   0   0;
0   0   1   1   1   1   1   1;
0   0   2   2   2   2   2   2;
0   1   0   0   1   1   2   2;
0   1   1   1   2   2   0   0;
0   1   2   2   0   0   1   1;
0   2   0   1   0   2   1   2;
0   2   1   2   1   0   2   0;
0   2   2   0   2   1   0   1;
1   0   0   2   2   1   1   0;
1   0   1   0   0   2   2   1;
1   0   2   1   1   0   0   2;
1   1   0   1   2   0   2   1;
1   1   1   2   0   1   0   2;
1   1   2   0   1   2   1   0;
1   2   0   2   1   2   0   1;
1   2   1   0   2   0   1   2;
1   2   2   1   0   1   2   0;]';
%按每行为一个样本输入并装置,下次输入直接按列做样本即可。
T = [53.44096386 137.9638554 99.42409639 91.27951807 177.2987952 203.8819277 23.80481928 171.2120482 146.1445783 144.9253012 ...
    55.84096386 127.7445783 110.653012 170.6626506 128.0361446 225.6795181 46.55421687 124.1012048]; 
[P PS_P]=mapminmax(P,0.1,0.9)
%max min按列求最大最小,标准化处理还可以[P,minp,maxp,T,mint,maxt] = premnmx(P,T)
[T PS_T]=mapminmax(T,0.1,0.9)
n=length(T)
n1=10%设置用来训练的样本个数
n2=n-n1
rd=randperm(n)%随机打乱一个数字序列
P1=P(:,rd(1:n1))
P2=P(:,rd(n1+1:n))
%将样本分为训练样本和监控样本
T1=T(rd(1:n1));%训练的
T2=T(rd(n1+1:n))%监控的



net=newff(minmax(P),[7,1],{'logsig','purelin'},'traingdx');
%训练前馈网络的第一步是建立网络对象
%常用的激活函数有线性函数purelin 对数s形转移logsig 双曲正切tansig  激活函数无论对于识别率或收敛速度都有显著的影响。在逼近高次曲线时,S形函数精度比线性函数要高得多,但计算量也要大得多 
%常用训练函数有traingd traingdx trainscg
%traninglm等 隐含节点个数过多会增加运算量,使得训练较慢。
%learn属性 'learngdm' 附加动量因子的梯度下降学习函数 

%net.iw{1,1}= inputWeights
%net.lw{2,1}=layerWeights
%net.b{1}=inputbias
%net.b{2}=layerbias 
net.trainParam.mc = 0.8; 
%动量因子一般取0.6 ~0.8
net.trainParam.epochs = 1000; 
net.trainParam.show = 10;
net.trainParam.goal = 1e-2; 
net.performParam.ratio=0.7;
%训练速率越大,权重变化越大,收敛越快;
%但训练速率过大,会引起系统的振荡,
%因此,训练速率在不导致振荡前提下,越大越好。一般取0.9
net.trainParam.lr=0.05;
%学习率设置偏小可以保证网络收敛,但是收敛较慢。
%相反,学习率设置偏大则有可能使网络训练不收敛,影响识别效果。



 [net,tr]=train(net,P1,T1);%net=init(net)
 %[ net, tr, Y1, E ]  = train( net, X, Y ) 
 %参数:X:网络实际输入Y:网络应有输出  tr:训练跟踪信息 Y1:网络实际输出  E:误差矩阵
 T1_sim=sim(net,P1)
 T2_sim=sim(net,P2)
 e1=sum(abs((T1_sim-T1)./T1))/n1
 e2=sum(abs((T2_sim-T2)./T2))/n2%求相对平均误差绝对值
 en=e1*n1/n+e2*n2/n%逼近误差
 dn=100/exp(10*en)%逼近度
 net=init(net)
 subplot(1,2,1),plot(T1);hold on;plot(T1_sim,'r')
 subplot(1,2,2),plot(T2,':mo');hold on;plot(T2_sim,'-.r*')