广义回归神经网络MATLAB源程序
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以及散布常数sc eg=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,26.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);%描绘输入点图像。
(完整word版)Matlab的神经网络工具箱入门

Matlab的神经网络工具箱入门在command window中键入help nnet>> help nnetNeural Network ToolboxVersion 7.0 (R2010b) 03-Aug-2010神经网络工具箱版本7.0(R2010b)03八月,2010图形用户界面功能。
nnstart - 神经网络启动GUInctool - 神经网络分类工具nftool - 神经网络的拟合工具nntraintool - 神经网络的训练工具nprtool - 神经网络模式识别工具ntstool - NFTool神经网络时间序列的工具nntool - 神经网络工具箱的图形用户界面。
查看- 查看一个神经网络。
网络的建立功能。
cascadeforwardnet - 串级,前馈神经网络。
competlayer - 竞争神经层。
distdelaynet - 分布时滞的神经网络。
elmannet - Elman神经网络。
feedforwardnet - 前馈神经网络。
fitnet - 函数拟合神经网络。
layrecnet - 分层递归神经网络。
linearlayer - 线性神经层。
lvqnet - 学习矢量量化(LVQ)神经网络。
narnet - 非线性自结合的时间序列网络。
narxnet - 非线性自结合的时间序列与外部输入网络。
newgrnn - 设计一个广义回归神经网络。
newhop - 建立经常性的Hopfield网络。
newlind - 设计一个线性层。
newpnn - 设计概率神经网络。
newrb - 径向基网络设计。
newrbe - 设计一个确切的径向基网络。
patternnet - 神经网络模式识别。
感知- 感知。
selforgmap - 自组织特征映射。
timedelaynet - 时滞神经网络。
利用网络。
网络- 创建一个自定义神经网络。
SIM卡- 模拟一个神经网络。
初始化- 初始化一个神经网络。
神经网络算法matlab

神经网络算法matlab神经网络算法是一种基于大脑神经元行为的计算模型,通过模拟神经元之间的相互连接和信息传递来实现智能的数据处理和学习能力。
Matlab是一种专门用于科学计算和算法开发的高级编程语言,在神经网络领域也有广泛的应用。
本文将介绍神经网络算法在Matlab中的实现方法。
首先,为了使用神经网络算法,首先需要安装Matlab并确保正确配置了相应的神经网络工具箱。
Matlab的神经网络工具箱提供了一系列用于构建、训练和测试神经网络模型的函数和工具。
在Matlab中,可以使用`feedforwardnet`函数来创建一个前馈神经网络。
这个函数可以指定网络的架构,包括神经元的数量、层数和激活函数等。
例如,下面的代码创建一个具有一个隐藏层和一个输出层的前馈神经网络:net = feedforwardnet([10]);```接下来,需要准备训练数据和目标数据。
在Matlab中,可以使用`mat2vec`函数将训练数据和目标数据转换为神经网络所需的格式。
然后,可以使用`train`函数将训练数据和目标数据输入到神经网络中进行训练。
例如,下面的代码将训练一个前馈神经网络来拟合一组数据:input = [1 2 3 4 5];target = [2 4 6 8 10];data = mat2vec(input, target);net = train(net, data.input, data.target);```在训练完成后,可以使用`sim`函数来对新的输入数据进行预测。
例如,下面的代码使用训练好的神经网络对新的输入数据进行预测:input_test = [6 7 8 9 10];output = sim(net, input_test);```除了前馈神经网络,Matlab还支持其他类型的神经网络模型,例如循环神经网络和自适应神经网络。
对于循环神经网络,可以使用`cascadeforwardnet`函数来创建一个具有循环连接的神经网络。
Matlab神经网络训练算法与技巧

Matlab神经网络训练算法与技巧近年来,神经网络在人工智能领域中发挥着重要作用。
它模拟了人脑神经元之间的连接,具备强大的非线性建模和数据处理能力。
而Matlab作为一种强大的科学计算软件,提供了丰富的工具箱和函数,可以帮助开发者构建和训练神经网络模型。
本文将探讨Matlab中神经网络训练算法与技巧,帮助读者更好地利用这一工具。
1. 数据预处理在构建神经网络之前,首先需要对数据进行预处理。
数据预处理是指将原始数据转化为适合神经网络训练的形式。
这包括数据的归一化、标准化、去噪处理等。
对于数据的归一化,可以使用Matlab中的normalize函数,将数据转化为指定范围内的数值。
而对于标准化,可以使用zscore函数,将数据按照均值为0、标准差为1的标准正态分布进行转换。
此外,Matlab还提供了众多数据去噪的函数,如medfilt1、wiener等,可以根据具体情况选择适当的方法进行数据去噪。
2. 网络模型选择在选择神经网络模型时,需要根据具体问题的特点和需求进行选择。
Matlab提供了常见的神经网络模型,如前馈神经网络、循环神经网络、卷积神经网络等。
前馈神经网络是最常用的模型之一,它的结构简单,容易理解和实现。
循环神经网络适合处理具有时序关系的数据,如自然语言处理和语音识别。
而卷积神经网络则适合处理图像数据,可以提取图像的特征表示。
根据问题的特点选择适合的网络模型,是训练神经网络的关键一步。
3. 网络参数初始化神经网络训练过程中,网络参数的初始化十分重要。
合适的参数初始化可以加速训练过程并提高模型的性能。
在Matlab中,可以使用内置的函数来初始化网络参数,如init函数、rand函数等。
对于权重和偏置的初始化,通常采用随机初始化的方法,即从一个较小的范围内随机选择初始值。
此外,也可以根据问题的特点,采用其他的初始化方法,如He、Xavier等。
4. 激活函数选择激活函数是神经网络中的一种非线性函数,用于引入非线性因素。
Matlab神经网络算法及应用

Matlab神经网络算法及应用引言近年来,神经网络算法在各个领域都得到了广泛应用。
Matlab作为一种功能强大的数学软件平台,提供了许多用于神经网络建模与分析的工具和函数。
本文将介绍Matlab中常用的神经网络算法,并探讨其在实际应用中的特点和应用范围。
一、神经网络基础知识1.1 神经网络的定义神经网络是一种模仿人脑神经元系统结构和工作原理的计算模型。
它由大量的人工神经元组成,通过神经元之间的连接和信号传递来实现信息的处理和计算。
1.2 神经网络的结构神经网络由输入层、隐藏层和输出层组成。
输入层接受外部输入信号,隐藏层进行信号处理,最后通过输出层产生网络的输出结果。
1.3 神经网络的训练神经网络的训练是指通过样本数据对网络参数进行优化的过程。
训练的目标是使得网络的输出结果与样本标签尽可能接近,从而实现对未知样本的预测能力。
二、Matlab中的神经网络工具箱2.1 Matlab神经网络工具箱的介绍Matlab提供了一个强大的神经网络工具箱,其中包含了各种用于神经网络建模和分析的函数和工具。
用户可以通过使用这些函数和工具,实现从简单的单层感知机网络到复杂的深度神经网络的构建和训练。
2.2 Matlab神经网络工具箱的特点Matlab神经网络工具包具有易于使用、灵活性高、计算速度快等特点。
用户可以通过图形界面或者编程接口来实现网络的构建和分析。
此外,工具包还提供了丰富的函数和算法,用于处理不同类型的问题,如分类、回归、聚类等。
三、Matlab中常用的神经网络算法3.1 BP神经网络算法BP(Back Propagation)神经网络算法是一种常用的监督学习算法。
它通过反向传播算法,根据网络输出与样本标签之间的误差来调整网络中的权值,从而实现对样本的分类或回归任务。
3.2 Hopfield神经网络算法Hopfield神经网络算法是一种常用的无监督学习算法。
它通过模拟大量相互连接的神经元之间的相互作用,实现对模式的自组织和记忆的能力。
MATLAB神经网络算法与应用

MATLAB神经网络算法与应用引言人工智能领域的快速发展,为各行各业带来了许多机会和挑战。
神经网络作为人工智能的关键技术之一,具有良好的模拟人类智能的能力,并在许多领域中发挥着重要的作用。
本文将着重介绍MATLAB中神经网络算法的原理与应用。
一、神经网络的基本原理神经网络是一种模拟人脑神经系统工作的算法模型,它由大量的神经元和连接它们的权重组成,通过调整权重来实现对输入和输出之间的映射关系推断。
神经网络的训练过程通常分为两个阶段:前向传播和反向传播。
在前向传播过程中,神经网络根据输入数据和当前的权重值,通过一系列计算将输入数据映射到输出。
每个神经元根据输入的加权和以及一个激活函数产生输出,并将输出传递给下一层神经元,最后生成最终的输出。
反向传播是神经网络的学习过程,它通过比较神经网络的输出和真实值之间的误差,来调整权重的值。
具体来说,反向传播需要计算每个权重对误差的贡献,并根据这个贡献来更新权重。
这个过程会不断迭代,直到神经网络的输出与真实值的误差足够小。
二、MATLAB中的神经网络算法MATLAB提供了丰富的神经网络算法工具箱,包括了多层感知机、自组织映射网络、径向基函数网络等多种类型的神经网络。
这些工具箱易于使用,使得神经网络模型的建立和训练变得更加简单。
在MATLAB中,我们可以使用`newff`函数来创建一个多层感知机神经网络模型。
该函数可以指定输入、隐藏和输出层的神经元数量、激活函数等。
例如,下面的代码创建了一个包含一个隐藏层的多层感知机:```net = newff(X, y, [10]);```其中,`X`是输入数据,`y`是输出数据,`[10]`表示隐藏层有10个神经元。
创建好神经网络后,我们可以使用`train`函数来训练模型。
例如,通过以下代码可以训练神经网络模型:```net = train(net, X, y);```在训练完成后,就可以使用训练好的神经网络模型对新的数据进行预测。
广义回归神经网络及其在Matlab中的实现

广义回归神经网络及其在Matlab中的实现
广义回归神经网络是径向基函数神经网络的一种特殊形式。
与目前流行的前馈神经网络相比,它具有下述几项优点。
1)首先,它的网络结构相对简单,除了输入和输出层外,一般只有两个隐藏层,模式层和求和层。
而模式中隐藏单元的个数,与训练样本的个数是相同的。
2)其次,它的网络训练非常简单。
当训练样本通过隐藏层的同时,网络训练随即完成。
而不像前馈神经网络一样,需要非常长的训练时间和高的计算成本。
3)由于简单的网络结构,我们不需要对网络的隐藏层数和隐藏单元的个数进行估算和猜测。
由于它是从径向基函数引申而来,因此只有一个自由参数,即径向基函数的平滑参数。
而它的优化值可以通过交叉验证的方法非常容易的得到。
4)最后,它的一个非常值得强调的优点就是,网络计算结果的全局收敛性。
标准的前馈神经网络的计算结果则会经常不能达到全局收敛,而停止在局部收敛。
下面是我昨晚匆忙写下的一段Matlab程序,展示如何实现广义回归神经网络和通过交叉验证来估算径向基函数的平滑参数,希望对大家有帮助。
下图是程序运算结果,由此可以轻易看出,平滑参数的最优值应在1.3和1.4之间。
matlab神经网络预测程序(自己编的可用)

Matlab自身带有神经网络的工具包,这个程序是我在实战中运行通过的,通过对原始数据的学习,预测未来一段时间的数据。
大家只要修改一下原始数据,预测时间即可。
下面是源程序:clcclear all%原始数据%p=load('shuru.txt');%p=p';p=[1994:2010];%t=load('shuchu.txt');%t=t';t=[124.175 117.0666667 108.3333333 102.8083333 99.225 98.6 100.35 100.725 99.41666667 101.1666667 103.9 101.8166667 101.4666667104.7666667 105.9 99.29166667 103.32255];% plot(p,t)%数据归一化[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);dx=[-1,1];%BP网络训练net=newff(dx,[5,1],{'tansig','tansig','purelin'},'traingdx'); net.trainParam.show=1000; %每1000轮回显示一次结果net.trainParam.Lr=0.05; %学习速率为0.05net.trainParam.epochs=3000; %循环10000次net.trainParam.goal=1e-5; %均方误差net=train(net,pn,tn);%对原数据进行仿真an=sim(net,pn);a=postmnmx(an,mint,maxt); %还原仿真得到的数据%与实际数据对比x=1994:2010;newk=a(1,:);figure;plot(x,newk,'r-o',x,t,'b--+');legend('预测值','实际值');xlabel('时间');ylabel('cpi的值');%对新数据进行预测pnew=[2012:2025];%预测2012年到2015年数据pnewn=tramnmx(pnew,minp,maxp);%新数据归一化anewn=sim(net,pnewn);anew=postmnmx(anewn,mint,maxt)%还原得到预测值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GRNN神经网络---广义回归神经网络,主要用于函数逼近。
x=-2:0.01:1y=2*x.^6+3*x.^5-3*x.^3+x.^2+1P=x(1:15:end)T=y(1:15:end)spread=[0.05 0.2 0.4 0.6 0.8];l_style={'r.-','bo--','ko-.','k*--','r^-'}; for i=1:length(spread)net=newgrnn(P,T,spread(i));a=sim(net,P);plot(P,a,l_style{i})hold onendplot(P,T,'o');legend('spread=0.05','spread=0.2','spread=0.4' ,'spread=0.6','spread=0.8','train data');title('GRNN神经网络spread探讨')load data;% 载入数据并将数据分成训练和预测两类p_train=p(1:10,:);p_test=p(11:13,:);t_train=t(1:10,:);t_test=t(11:13,:);% 将各个矩阵转置以便适应网络结构p_train=p_train';t_train=t_train';p_test=p_test';t_test=t_test';% 将数据归一化[pn,minp,maxp,tn,mint,maxt]=premnmx(p_train,t_ train);p2n=tramnmx(p_test,minp,maxp);for sc=0.1:0.01:1;tic,net=newgrnn(pn,tn,sc);sctocOut=sim(net,p2n);a2=postmnmx(Out,mint,maxt); e=t_test-a2';perf=mse(e);Y=sim(net,pn);a3=postmnmx(Y,mint,maxt); ep=a3-t_train;perfp=mse(ep);hold on;figure(1);title('网络的预测误差')plot(sc,perf,'g:*');hold on;figure(2);title('网络的逼近误差')plot(sc,perfp,'r:*');end%通用感应器神经网络。
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},linehandl e);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,:)')。