学习了一段时间的神经网络,总结了一些经验,在这愿意和大家分享一下,
希望对大家有帮助,也希望大家可以把其他神经网络的通用代码在这一起分享
感应器神经网络、线性网络、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; %限时训练迭代过程(NaN表示不显示,