[源码] 基于Matlab神经网络工具的BP网络实例(注释很详细)
(完整版)BP神经网络matlab实例(简单而经典).doc
p=p1';t=t1';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); % 原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx'); %设置网络,建立相应的BP 网络net.trainParam.show=2000; % 训练网络net.trainParam.lr=0.01;net.trainParam.epochs=100000;net.trainParam.goal=1e-5;[net,tr]=train(net ,pn,tn); %调用TRAINGDM 算法训练BP 网络pnew=pnew1';pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn);anew=postmnmx(anewn,mint,maxt); %对 BP 网络进行仿真%还原数据y=anew';1、 BP 网络构建(1)生成 BP 网络net newff ( PR,[ S1 S2...SNl],{ TF1 TF 2...TFNl }, BTF , BLF , PF ) PR :由R 维的输入样本最小最大值构成的R 2 维矩阵。
[ S1 S2...SNl] :各层的神经元个数。
{TF 1 TF 2...TFNl } :各层的神经元传递函数。
BTF :训练用函数的名称。
(2)网络训练[ net,tr ,Y, E, Pf , Af ] train (net, P, T , Pi , Ai ,VV , TV )(3)网络仿真[Y, Pf , Af , E, perf ] sim(net, P, Pi , Ai ,T ){'tansig','purelin'},'trainrp'BP 网络的训练函数训练方法梯度下降法有动量的梯度下降法自适应 lr 梯度下降法自适应 lr 动量梯度下降法弹性梯度下降法训练函数traingd traingdm traingda traingdx trainrpFletcher-Reeves 共轭梯度法traincgf Ploak-Ribiere 共轭梯度法traincgpPowell-Beale 共轭梯度法traincgb 量化共轭梯度法trainscg 拟牛顿算法trainbfg 一步正割算法trainoss Levenberg-Marquardt trainlmBP 网络训练参数训练参数net.trainParam.epochsnet.trainParam.goal net.trainParam.lrnet.trainParam.max_fail net.trainParam.min_grad net.trainParam.show net.trainParam.timenet.trainParam.mc net.trainParam.lr_inc 参数介绍最大训练次数(缺省为10)训练要求精度(缺省为0)学习率(缺省为0.01 )最大失败次数(缺省为5)最小梯度要求(缺省为1e-10)显示训练迭代过程( NaN 表示不显示,缺省为 25)最大训练时间(缺省为inf )动量因子(缺省0.9)学习率lr增长比(缺省为1.05)训练函数traingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingd 、traingdm 、traingda 、traingdx 、 trainrp 、 traincgf 、traincgp 、traincgb 、trainscg、trainbfg 、 trainoss、 trainlmtraingdm 、 traingdx traingda 、traingdxnet.trainParam.lr_dec 学习率 lr 下降比(缺省为 0.7) traingda 、 traingdxnet.trainParam.max_perf_inc 表现函数增加最大比(缺省traingda 、 traingdx为 1.04)net.trainParam.delt_inc 权值变化增加量(缺省为trainrp1.2)net.trainParam.delt_dec 权值变化减小量(缺省为trainrp0.5)net.trainParam.delt0 初始权值变化(缺省为 0.07) trainrpnet.trainParam.deltamax 权值变化最大值(缺省为trainrp50.0)net.trainParam.searchFcn 一维线性搜索方法(缺省为traincgf 、traincgp 、traincgb 、srchcha)trainbfg 、 trainossnet.trainParam.sigma 因为二次求导对权值调整的trainscg影响参数(缺省值 5.0e-5)mbda Hessian 矩阵不确定性调节trainscg参数(缺省为 5.0e-7)net.trainParam.men_reduc 控制计算机内存/ 速度的参trainlm量,内存较大设为1,否则设为 2(缺省为 1)net.trainParam.mu 的初始值(缺省为0.001) trainlmnet.trainParam.mu_dec 的减小率(缺省为0.1)trainlmnet.trainParam.mu_inc 的增长率(缺省为10)trainlmnet.trainParam.mu_max 的最大值(缺省为1e10)trainlm2、 BP 网络举例举例 1、%traingdclear;clc;P=[-1 -1 2 2 4;0 5 0 5 7];T=[-1 -1 1 1 -1];%利用 minmax函数求输入样本范围net = newff(minmax(P),T,[5,1],{'tansig','purelin'},'trainrp');net.trainParam.show=50;%net.trainParam.lr=0.05;net.trainParam.epochs=300;net.trainParam.goal=1e-5;[net,tr]=train(net,P,T);net.iw{1,1}%隐层权值net.b{1}%隐层阈值net.lw{2,1}%输出层权值net.b{2}%输出层阈值sim(net,P)BP 神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。
用MATLAB的神经网络工具箱实现三层BP网络
用MATLAB的神经网络工具箱实现三层BP网络用MATLAB的神经网络工具箱实现三层BP网络% 读入训练数据和测试数据Input = [];Output = [];str = {'Test','Check'};Data = textread([str{1},'.txt']);% 读训练数据Input = Data(:,1:end-1);% 取数据表的前五列(主从成分)Output = Data(:,end);% 取数据表的最后一列(输出值)Data = textread([str{2},'.txt']);% 读测试数据CheckIn = Data(:,1:end-1);% 取数据表的前五列(主从成分)CheckOut = Data(:,end);% 取数据表的最后一列(输出值)Input = Input';Output = Output';CheckIn = CheckIn';CheckOut = CheckOut';% 矩阵赚置[Input,minp,maxp,Output,mint,maxt] = premnmx(Input,Output);% 标准化数据%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%% 神经网络参数设置%====可以修正处Para.Goal = 0.0001;% 网络训练目标误差Para.Epochs = 800;% 网络训练代数Para.LearnRate = 0.1;% 网络学习速率%====Para.Show = 5;% 网络训练显示间隔Para.InRange = repmat([-1 1],size(Input,1),1);% 网络的输入变量区间Para.Neurons = [size(Input,1)*2+1 1];% 网络后两层神经元配置Para.TransferFcn= {'logsig' 'purelin'};% 各层的阈值函数Para.TrainFcn = 'trainlm';% 网络训练函数赋值% traingd : 梯度下降后向传播法% traingda : 自适应学习速率的梯度下降法% traingdm : 带动量的梯度下降法% traingdx :% 带动量,自适应学习速率的梯度下降法Para.LearnFcn = 'learngdm';% 网络学习函数Para.PerformFcn = 'sse';% 网络的误差函数Para.InNum = size(Input,1);% 输入量维数Para.IWNum = Para.InNum*Para.Neurons(1);% 输入权重个数Para.LWNum = prod(Para.Neurons);% 层权重个数Para.BiasNum = sum(Para.Neurons);% 偏置个数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%Net = newff(Para.InRange,Para.Neurons,Para.TransferFcn,...Para.TrainFcn,Para.LearnFcn,Para.PerformFcn);% 建立网络%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%Net.trainParam.show = Para.Show;% 训练显示间隔赋值Net.trainParam.goal = Para.Goal;% 训练目标误差赋值Net.trainParam.lr = Para.LearnRate;% 网络学习速率赋值Net.trainParam.epochs = Para.Epochs;% 训练代数赋值Net.trainParam.lr = Para.LearnRate;Net.performFcn = Para.PerformFcn;% 误差函数赋值%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 调试Out1 =sim(Net,Input);% 仿真刚建立的网络Sse1 =sse(Output-Out1);% 刚建立的网络误差%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [Net TR] = train(Net,Input,Output);% 训练网络并返回%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Out3 =sim(Net,Input);% 对学习训练后的网络仿真。
基于MATLAB神经网络工具箱的BP网络实现
2 BP 网络模型
BP 网 络是一种多层前馈神经 网络 , 由输入 层 、隐层和 输 出层组成 。 层与层之间采用全互连方式 , 同一层 之间不存 在 相互连接 , 隐层可以 有一个 或多 个 。 构造 一个 BP 网 络需 要
收稿日期 :2003 -03 -06
确定其 处 理单 元 ——— — 神 经元 的 特 性和 网 络的 拓 扑结 构 。 神经元是神经网络最基本的处理单元 , 隐层中 的神经元采 用 S 型变换 函数 , 输出层的 神经元可采 用 S 型或线 性型变换 函 数 。 图 1 为一个典型的三层 BP 网络的拓扑结构 。
其中 :PR 是一个 由每 个输 入向 量 的最 大最 小值 构成 的 Rx2 矩阵 , R 为输入神经元数目 。
Si 是第 i 层网络的神经元个 数 , 网络共有 N1 层 。 TFi 是第 i 层网络神经元的变换函数 , 缺省为 tansig . BTF 是 BP 训练算法函数 , 缺省为 trainlm. BLF 是学习函数 , 缺省为 learngdm. PF 是性能函数 , 缺省为 mse . newff 在确定网络结构 后会 自动调 用初 始化 函数 init , 用 缺省参数来初始化网络中各个权值和阈值 , 产生 一个可训 练 的前馈网络 , 即该函数的 返回值 net。 在 MATLAB 中 , 神经 网 络 net 当做对象(object)处理 , 其属性用结构来定义 。 3)初始化函数 init :它是 对网 络的 连接 权值 和阈 值进 行 初始化 。 newff 在 创建 网络 对象 的 同时 , 自 动 调动 初始 化 函 数 , 根据缺省的参数对网络进行连接权值和阈 值初始化 。 4)学习函数 :提供多种学习函数 , 用来修 正权值和 阈值 。 基本的学习函数有 :learngd 、 learngdm。 5)性能函数 :它是用来计算网络 的输出误差 。 为训练 提 供判据 , 包 括 :函 数 mae , 计 算网 络 的 平 均 绝 对 误 差 ;函 数 mse, 计算网络的均方误差 ;函 数 msereg , 计算 均方误差 和权/ 阈值的加权 ;函数 sse , 计算网络的均方误差和 。 6)训练函数 train : BP 网 络的训练初始化后 , 可对 它进行训练 。 在 MATLAB 中训练网络有两类模式 :逐变模式 和批处理 模式 。 在逐变 模 式中 , 每输入一个学习样本就根据网 络性能指标 函数对连 接 权值和阈值更新一次 。 在批处理模式中 , 所有的 学习样本 都 学习完成后 , 连接权值和阈值才被 更新一次 。 使 用批处理 模 式不需要为每一层的连接权值和阈值设定 训练函数 , 而只 需 为整个网络指定 一个 训练 函数 , 使用 起来 相对方 便 , 而且 许 多改进的快速训练算法只能采用批处理模式 。 训练网 络 的 函 数 是 train 按 设 置 的 net.trainFcn 和 net. trainParam 参数来 训练网络 , 采用批处理方式进行网络的权 值 和阈值修正 , 最终达到设定的网络性能指标的 要求 。 7)BP 训练算法函数 :它是 根据网络 的输入 、目 标期望 输 出 , 对由 函数 newff 生成的 BP 网络 进行计 算 , 修正其 权值 和 阈值 , 最终达到设定的网络性能指 标的要求 。 不 同的训练 算 法函数对应不同的训练算法 , 如 traingd 对应最基 本梯度下 降 法 ;traingdm 带有动量 项 的梯 度下 降法 ;traingdx 带有 采用 动
基于MATLAB神经网络工具箱的BP网络设计
基于MATLAB神经网络工具箱的BP网络设计摘要本文介绍了MA TLAB神经网络工具箱及其常用的工具箱函数;在说明BP网络的模型结构和算法的基础上,讨论了BP网络的训练过程及其设计原则,并用一个典型的两层结构的神经网络实现了具有函数逼近功能的BP网络设计。
关键词: MAT LAB神经网络工具箱BP算法BP网络设计函数逼近Abstract Firstly, the MATLAB’s Neural Net works Toolbox and its common toolbox functions are presen2ted . Then, after the model structure and arithmetic of the BP Neural Net work being introduced briefly, its training process and the design principle are analyzed emphatically . At last, with the help of the MATLAB Neural Net work Toolbox, the design of a typical two - layer - structure BP Neural Net work of function approaching is implemented Keywords MAT LAB neural net works toolbox BP arithmetic BP neural net works design Function approaching引言神经网络理论是在20世纪提出的,它从微观结构和功能上模拟人脑的组织机构和运行机制,能够较好地描述非线性系统和不确定系统。
由于神经网络具有可并行计算、分布式信息存储、自适应和学习能力强等优点,在很多领域获得了极其广泛的应用。
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);```最后,可以使用各种性能指标来评估预测的准确性。
BP神经网络matlab实现和matlab工具箱使用实例
samplelist=[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和网网),如输有的有有学
num1=5; %设隐设稍 num2=10000; %最也迭迭迭稍 a1=0.02; %星也显显 a2=0.05; %学学学
test=randn(1,5)*0.5; %网网网稍5和个个作 in=-1:.1:1; %训训作 expout=[-.9602 -.5770 -.0729 .3771 .6405 .6600 .4609 .1336 -.2013 -.4344 -.5000 -.3930 -.1647 .0988 .3072 .3960 .3449 .1816
%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);
(完整版)BP神经网络matlab实例(简单而经典)
p=p1';t=t1';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx');%设置网络,建立相应的BP网络net.trainParam.show=2000; % 训练网络net.trainParam.lr=0.01;net.trainParam.epochs=100000;net.trainParam.goal=1e-5;[net,tr]=train(net ,pn,tn); %调用TRAINGDM算法训练BP 网络pnew=pnew1';pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn); %对BP网络进行仿真anew=postmnmx(anewn,mint,maxt); %还原数据y=anew';1、BP网络构建(1)生成BP网络=net newff PR S S SNl TF TF TFNl BTF BLF PF(,[1 2...],{ 1 2...},,,)PR:由R维的输入样本最小最大值构成的2R⨯维矩阵。
S S SNl:各层的神经元个数。
[ 1 2...]{ 1 2...}TF TF TFNl:各层的神经元传递函数。
BTF:训练用函数的名称。
(2)网络训练[,,,,,] (,,,,,,)=net tr Y E Pf Af train net P T Pi Ai VV TV(3)网络仿真=[,,,,] (,,,,)Y Pf Af E perf sim net P Pi Ai T{'tansig','purelin'},'trainrp'2、BP网络举例举例1、%traingdclear;clc;P=[-1 -1 2 2 4;0 5 0 5 7];T=[-1 -1 1 1 -1];%利用minmax函数求输入样本范围net = newff(minmax(P),T,[5,1],{'tansig','purelin'},'trainrp');net.trainParam.show=50;%net.trainParam.lr=0.05;net.trainParam.epochs=300;net.trainParam.goal=1e-5;[net,tr]=train(net,P,T);net.iw{1,1}%隐层权值net.b{1}%隐层阈值net.lw{2,1}%输出层权值net.b{2}%输出层阈值sim(net,P)举例2、利用三层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网络的权值初始化都是随即生成,所以每次运行的状态可能不一样。
BP神经网络matlab实例(简单而经典)
p=p1';t=t1';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx'); %设置网络,建立相应的BP 网络net.trainParam.show=2000; % 训练网络net.trainParam.lr=0.01;net.trainParam.epochs=100000;net.trainParam.goal=1e-5;[net,tr]=train(net ,pn,tn); %调用TRAINGDM算法训练BP网络pnew=pnew1';pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn); %对BP网络进行仿真anew=postmnmx(anewn,mint,maxt); %还原数据y=anew';1、BP网络构建(1)生成BP网络(,[1 2...],{ 1 2...},,,) net newff PR S S SNl TF TF TFNl BTF BLF PFPR:由R维的输入样本最小最大值构成的2R⨯维矩阵。
S S SNl:各层的神经元个数。
[ 1 2...]TF TF TFNl:各层的神经元传递函数。
{ 1 2...}BTF:训练用函数的名称。
(2)网络训练=[,,,,,] (,,,,,,)net tr Y E Pf Af train net P T Pi Ai VV TV (3)网络仿真=Y Pf Af E perf sim net P Pi Ai T[,,,,] (,,,,){'tansig','purelin'},'trainrp'BP网络的训练函数BP网络训练参数2、BP网络举例举例1、%traingdclear;clc;P=[-1 -1 2 2 4;0 5 0 5 7];T=[-1 -1 1 1 -1];%利用minmax函数求输入样本范围net = newff(minmax(P),[5,1],{'tansig','purelin'},'trainrp');net.trainParam.show=50;%net.trainParam.lr=0.05;net.trainParam.epochs=300;net.trainParam.goal=1e-5;[net,tr]=train(net,P,T);net.iw{1,1}%隐层权值net.b{1}%隐层阈值net.lw{2,1}%输出层权值net.b{2}%输出层阈值sim(net,P)举例2、利用三层BP神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。
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神经网络实验-MatlabBP神经网络是一种常见的人工神经网络模型。
在实际应用中,BP神经网络广泛用于分类、预测、优化等任务中。
本文将介绍如何在Matlab中实现BP神经网络,并通过一个简单的分类问题进行实验验证。
1. 数据准备首先,我们需要准备数据。
本文采用的数据是一个二分类问题,即在一个二维平面中,将数据点分为两类。
为了方便起见,我们可以手动生成一些数据点,或者使用Matlab自带的数据集如“fisheriris”。
2. BP神经网络模型的构建在Matlab中,我们可以使用“newff”函数来构建BP神经网络模型。
该函数可以接受多个参数,包括输入层、隐含层和输出层的节点数量,以及激活函数、学习算法等参数。
以下是构建一个包含1个输入层、1个隐含层和1个输出层的BP神经网络的示例代码:4. BP神经网络模型的测试在训练完成后,我们可以使用BP神经网络模型对测试数据进行分类预测。
在Matlab 中,我们可以使用“sim”函数来预测分类结果。
以下是对测试数据进行分类预测的示例代码:output=round(sim(net,test_data));其中,“output”是分类预测结果;“test_data”是测试数据。
5. 性能评估最后,我们需要对BP神经网络模型的分类性能进行评估。
在Matlab中,我们可以使用“confusionmat”函数来计算分类矩阵,进而计算分类准确率等性能指标。
以下是计算分类准确率的示例代码:[C,order]=confusionmat(test_label,output);accuracy=(C(1,1)+C(2,2))/sum(sum(C));其中,“C”是分类矩阵;“order”是分类标签;“accuracy”是分类准确率。
BP神经网络matlab实例(简单而经典)(完整资料).doc
【最新整理,下载后即可编辑】p=p1';t=t1';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx');%设置网络,建立相应的BP网络,minmax(pn)找到pn 矩阵的最大最小值net.trainParam.show=2000; % 训练网络net.trainParam.lr=0.01;net.trainParam.epochs=100000;net.trainParam.goal=1e-5;[net,tr]=train(net ,pn,tn); %调用TRAINGDM算法训练BP网络pnew=pnew1';pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn); %对BP网络进行仿真anew=postmnmx(anewn,mint,maxt); %还原数据y=anew';1、BP网络构建(1)生成BP网络net newff PR S S SNl TF TF TFNl BTF BLF PF=(,[1 2...],{ 1 2...},,,)PR:由R维的输入样本最小最大值构成的2R⨯维矩阵。
S S SNl:各层的神经元个数。
[ 1 2...]TF TF TFNl:各层的神经元传递函数。
{ 1 2...}BTF:训练用函数的名称。
(2)网络训练[,,,,,] (,,,,,,)=net tr Y E Pf Af train net P T Pi Ai VV TV (3)网络仿真=Y Pf Af E perf sim net P Pi Ai T[,,,,] (,,,,){'tansig','purelin'},'trainrp'BP网络训练参数举例1、%traingdclear;clc;P=[-1 -1 2 2 4;0 5 0 5 7];T=[-1 -1 1 1 -1];%利用minmax函数求输入样本范围net = newff(minmax(P),[5,1],{'tansig','purelin'},'trainrp');%minmax(P)取P的最大最小值;[5,1]第一次神经元5个,第二层1个;'tansig','purelin'神经网络第一层和第二层的转移函数;'trainrp'网络训练函数。
Matlab训练好的BP神经网络如何保存和读取方法(附实例说明)
Matlab训练好的BP神经网络如何保存和读取方法(附实例说明)看到论坛里很多朋友都在提问如何存储和调用已经训练好的神经网络。
本人前几天也遇到了这样的问题,在论坛中看了大家的回复,虽然都提到了关键的两个函数“save”和“load”,但或多或少都简洁了些,让人摸不着头脑(呵呵,当然也可能是本人太菜)。
通过不断调试,大致弄明白这两个函数对神经网络的存储。
下面附上实例给大家做个说明,希望对跟我有一样问题的朋友有所帮助。
如果只是需要在工作目录下保到当前训练好的网络,可以在命令窗口输入:save net %net为已训练好的网络然后在命令窗口输入:load net %net为已保存的网络加载net。
但一般我们都会在加载完后对网络进行进一步的操作,建议都放在M文件中进行保存网络和调用网络的操作如下所示:%% 以函数的形式训练神经网络functionshenjingwangluo()P=[-1,-2,3,1;-1,1,5,-3];%P为输入矢量T=[-1,-1,1,1,];%T为目标矢量net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')%创建一个新的前向神经网络inputWeights=net.IW{1,1}inputbias=net.b{1}%当前输入层权值和阀值layerWeights=net.LW{2,1}layerbias=net.b{2}net.trainParam.show=50;net.trainParam.lr=0.05;net.trainParam.mc=0.9;net.trainParam.epochs=1000;net.trainParam.goal=0.0002;%调用算法训练BP网络[net,tr]=train(net,P,T);%保存训练好的网络在当前工作目录下的aaa 文件中,net为网络名save('aaa', 'net');%也可以采用格式“save aaa net;”%若要保存到指定目录用“'save('d:\aaa.mat', 'net');”这样就保存到指定的目录下了%%调用网络,以函数的形式function jiazaiwangluo()%网络加载,注意文件名要加单引号load('-mat','aaa');%从指定目录加载“load('-mat','d:\aaa.mat'); ”P=[3;4]A=sim(net,P)%对网络进行仿真上面两个函数都已经调试成功,有需要的朋友可以试试看,希望对大家有帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[源码]基于Matlab神经网络工具的BP网络实例(注释很详细)
1.clear
2.clc
3.close all
4.warning off
5.%数据输入
6.huanghe_p=[370 503 434 575 490 420 560 640 558 343 326 405 446 423 422 697
598 377 435 472 451 667 601 689 541 485 425 389 382 707 422];
7.huanghe_t=[515 713 586 753 720 567 717 987 810 489 453 589 639 568 595 982
849 519 615 652 599 941 893 999 758 701 630 561 520 1040 535];
8.
9.%归一化处理
10.p=(huanghe_p-min(huanghe_p))/(max(huanghe_p)-min(huanghe_p));
11.t=(huanghe_t-min(huanghe_t))/(max(huanghe_t)-min(huanghe_t));
12.
13.%网络有关参数
14.EPOCHS=10000;
15.GOAL=0.000005;
16.LR=0.01;
17.MAX_FAIL=100;
18.
19.%建立bp神经网络,并训练,仿真。
其中输入为p,输出为t
20.
21.%-------------------------隐层神经元确定-----------------------------
22.
23.s=3:15;%s 为常向量,表示神经元的个数
24.res=zeros(size(s));%res将要存储误差向量,这里先置零
25.
26.pn=[p(1:5);p(6:10);p(11:15);p(16:20)];
27.tn=[t(1:5);t(6:10);t(11:15);t(16:20)];
28.for i=1:length(s)
29. %7.0版本使用下面代码
30. %输出层的神经元个数必须等于tn的行数
31. %每层的传递函数可以自己指定
32. %创建了2层网路,隐层s(i)(任意);输出层4(由tn决定不可改,但需输入)
33. %net=newff(minmax(pn),[s(i),4],{'tansig','purelin'},'trainlm');
34. %
35. %7.6版本使用下面的代码
36. %输出层神经元由tn决定,不需要输入,我们只需要确定输入层和隐层的神经元个数
37. %所有层的传递函数都可以自己定义
38. %创建3层网络,输入层8(任意);隐层s(i)(任意);输出层4(由tn决定,不可改,
不需要输入)
39. %
40. %其实两个版本的区别在于7.6的bp网络创建函数直接给出了t,故最后一层不需要
指定了,故相同的参数时,7.6的会多一层
41. %
42. net=newff(pn,tn,[4,s(i)],{'tansig','tansig','purelin'},'trainlm');
43. net.iw{1,1}=zeros(size(net.iw{1,1}))+0.5;
44. net.lw{2,1}=zeros(size(net.lw{2,1}))+0.75;
45. net.b{1,1}=zeros(size(net.b{1,1}))+0.5;
46. net.b{2,1}=zeros(size(net.b{2,1}));
47. net.trainParam.epochs=EPOCHS;
48. net.trainParam.goal =GOAL;
49. net.trainParam.lr=LR;
50. net.trainParam.max_fail=MAX_FAIL;
51. net=train(net,pn,tn);
52. y=sim(net,pn);
53. e=tn-y;
54. error=mse(e,net);
55. res(i)=norm(error);
56.end
57.%选取最优神经元数,number为使得误差最小的隐层神经元个数
58.[ttmp2,ind]=min(res);
59.no=s(ind);
60.
61.%选定隐层神经元数目后,建立网络,训练仿真。
62.%7.0版本
63.%net=newff(minmax(pn),[no,4],{'tansig','purelin'},'trainlm');
64.%7.6版本
=newff(pn,tn,[4,no],{'tansig','tansig','purelin'},'trainlm');
.iw{1,1}=zeros(size(net.iw{1,1}))+0.5;
.lw{2,1}=zeros(size(net.lw{2,1}))+0.75;
.b{1,1}=zeros(size(net.b{1,1}))+0.5;
.b{2,1}=zeros(size(net.b{2,1}));
.trainParam.epochs=EPOCHS;
.trainParam.goal =GOAL;
.trainParam.lr=LR;
.trainParam.max_fail=MAX_FAIL;
=train(net,pn,tn);
75.y=sim(net,pn);
76.e=tn-y;
77.error=mse(e,net)%error为网络的误差向量
78.r=norm(error);%r为网络的整体误差
79.save net %保存最好的网络
80.%预测
81.input=[p(11:15);p(16:20);p(21:25);p(26:30)];
82.yuce=sim(net,input);
83.
84.%结果反归一化
85.y_norm=[y(1,:) y(2,:) y(3,:) y(4,:)];
86.yuce_norm=[yuce(1,:) yuce(2,:) yuce(3,:) yuce(4,:)];
87.%训练数据的仿真结果
88.t_val=y_norm*(max(huanghe_t(1:20))-min(huanghe_t(1:20)))+min(huanghe_t(
1:20));
89.%预测数据的仿真结果
90.yuce=yuce_norm*(max(huanghe_t(1:20))-min(huanghe_t(1:20)))+min(huanghe_
t(1:20));
91.
92.%计算误差
93.%训练数据仿真的相对误差
94.wucha=abs(t_val-huanghe_t(1:20))./huanghe_t(1:20);
95.b=minmax(wucha);
96.average_wucha=mean(wucha);
97.%作图
98.figure(1)
99.plot(1:20,huanghe_t(1:20),'*-',1:20,t_val,'o:')
100.title('训练数据仿真结果')
101.legend('原始数据','仿真结果')
102.
103.figure(2)
104.plot(1:20,huanghe_t(11:30),'*-',1:20,yuce,'o:')
105.title('预测数据仿真结果')
106.legend('原始数据','仿真结果')
复制代码。