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 on linehandle=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 on plot([min(time) max(time)],[0 0],'r:')%可用 plot(x,zeros(size(x)),'r:')代替 hold off xlabel('时间'); 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; %限时训练