ImageVerifierCode 换一换
格式:DOCX , 页数:4 ,大小:14.98KB ,
资源ID:2488944      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2488944.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(人工神经网络Matlab实现代码.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

人工神经网络Matlab实现代码.docx

1、以下是用Matlab中的 m语言编写的BP神经网络代码,实现的是一个正弦函数的拟合过程,包括了初始化、BP算法、绘制曲线等过程,可以将代码放到一个M文件中运行,以下是代码:defaultpoints=20; %隐含层节点数inputpoints=1; %输入层节点数outputpoints=1; %输出层节点数Testerror=zeros(1,100);%每个测试点的误差记录a=zeros(1,inputpoints);%输入层节点值y=zeros(1,outputpoints);%样本节点输出值w=zeros(inputpoints,defaultpoints);%输入层和隐含层权值%初始

2、化权重很重要,比如用rand函数初始化则效果非常不确定,不如用zeros初始化v=zeros(defaultpoints,outputpoints);%隐含层和输出层权值bin=rand(1,defaultpoints);%隐含层输入bout=rand(1,defaultpoints);%隐含层输出base1=0*ones(1,defaultpoints);%隐含层阈值,初始化为0cin=rand(1,outputpoints);%输出层输入cout=rand(1,outputpoints);%输出层输出base2=0*rand(1,outputpoints);%输出层阈值error=zero

3、s(1,outputpoints);%拟合误差errors=0;error_sum=0; %误差累加和error_rate_cin=rand(defaultpoints,outputpoints);%误差对输出层节点权值的导数error_rate_bin=rand(inputpoints,defaultpoints);%误差对输入层节点权值的导数alfa=0.5; % alfa 是隐含层和输出层权值-误差变化率的系数,影响很大belt=0.5; % belt 是隐含层和输入层权值-误差变化率的系数,影响较小gama=5; % gama 是误差放大倍数,可以影响跟随速度和拟合精度,当gama大于

4、2时误差变大,容易震荡%规律 100个隐含节点,当alfa *gama =1.5时,效果好,其他值误差变大,belt基本不影响效果%规律 200个隐含节点,当alfa *gama =0.7时,效果好,其他值误差变大,belt基本不影响效果,最小误差和100个隐含点一样%规律 50个隐含节点,当alfa *gama =3时,效果好,其他值误差变大,belt基本不影响效果,最小误差和100个隐含点一样trainingROUND=200;% 训练次数,有时训练几十次比训练几百次上千次效果要好很多sampleNUM=361; % 样本点数x1=zeros(sampleNUM,inputpoints);

5、 %样本输入矩阵y1=zeros(sampleNUM,outputpoints); %样本输出矩阵x2=zeros(sampleNUM,inputpoints); %测试输入矩阵y2=zeros(sampleNUM,outputpoints); %测试输出矩阵observeOUT=zeros(sampleNUM,outputpoints); %拟合输出监测点矩阵i=0;j=0;k=0; %其中j是在一个训练周期中的样本点序号,不可引用i=0;h=0;o=0; %输入层序号,隐含层序号,输出层序号x=0:0.2*pi:2*pi; %步长for j=1:9 %这里给样本输入和输出赋值,应根据具体应

6、用来设定 x1(j,1)=x(j); y1(j,1)=sin(x1(j,1);endx=0:2*pi/361:2*pi;for j=1:361 x2(j,1)=x(j); y2(j,1)=sin(x2(j,1); endfor o=1:outputpointsy1(:,o)=(y1(:,o)-min(y1(:,o)/(max(y1(:,o)-min(y1(:,o);%归一化,使得输出范围落到0,1区间上,当激活函数为对数S型时适用y2(:,o)=(y2(:,o)-min(y2(:,o)/(max(y2(:,o)-min(y2(:,o);endfor i=1:inputpointsx1(:,i)

7、=(x1(:,i)-min(x1(:,i)/(max(x1(:,i)-min(x1(:,i);%输入数据归一化范围要和输出数据的范围相同,0,1x2(:,i)=(x2(:,i)-min(x2(:,i)/(max(x2(:,i)-min(x2(:,i);endsampleNUM=9;for mmm=1:trainingROUND %训练开始,100次 error_sum=0; if mmm=trainingROUND sampleNUM=361; endfor j=1:sampleNUM %每次训练一个样本点 for i=1:inputpoints %样本输入层赋值 a(i)=x1(j,i);

8、end for o=1:outputpoints %样本输出层赋值 y(o)=y1(j,o); end if mmm=trainingROUND for i=1:inputpoints %样本输入层赋值 a(i)=x2(j,i); end for o=1:outputpoints %样本输出层赋值 y(o)=y2(j,o); end end for h=1:defaultpoints bin(h)=0; for i=1:inputpoints bin(h)=bin(h)+a(i)*w(i,h); end bin(h)=bin(h)-base1(h); bout(h)=1/(1+exp(-bin

9、(h);%隐含层激励函数为对数激励endtemp_error=0;for o=1:outputpoints cin(o)=0; for h=1:defaultpoints cin(o)=cin(o)+bout(h)*v(h,o); end cin(o)=cin(o)-base2(o); cout(o)=1/(1+exp(-cin(o); %输出层激励函数为对数激励 observeOUT(j,o)=cout(o); error(o)=y(o)-cout(o); temp_error=temp_error+error(o)*error(o);%记录实际误差,不应该乘伽玛系数 error(o)=ga

10、ma*error(o);endTesterror(j)=temp_error; error_sum=error_sum+Testerror(j);for o=1:outputpoints error_rate_cin(o)=error(o)*cout(o)*(1-cout(o); endfor h=1:defaultpoints error_rate_bin(h)=0; for o=1:outputpoints error_rate_bin(h)= error_rate_bin(h)+error_rate_cin(o)*v(h,o); end error_rate_bin(h)=error_r

11、ate_bin(h)*bout(h)*(1-bout(h);endfor h=1:defaultpoints base1(h)=base1(h)-5*error_rate_bin(h)*bin(h); %base1变化不影响最小误差,但是可以抑制由于过多训练产生的发散效果 for o=1:outputpoints v(h,o)=v(h,o)+alfa*error_rate_cin(o)*bout(h); % 可能要改,正负号? % base1(i)=base1(i)+0.01*alfa*error(i); end for i=1:inputpoints w(i,h)=w(i,h)+belt*e

12、rror_rate_bin(h)*a(i); % 可能要改,正负号? %base2=base2+0.01*belt*out_error; endendend %一轮训练结束 if(error_sum0.01) %error_sum中记录一轮训练中所有样本的所有输出和拟合输出值差值平方和 break; endend %/训练结束figureplot(x(1:sampleNUM),Testerror(1:sampleNUM),r+)hold onplot(x(1:sampleNUM),y2(1:sampleNUM,1),*)hold onplot(x(1:sampleNUM),observeOUT(1:sampleNUM,1),o)hold onylabel(num2str(mmm);xlabel(num2str(error_sum);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1