神经网络作业(函数逼近)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

智能控制理论及应用作业

1资料查询

BP 神经网络的主要应用:

人脸识别、风电功率预测、短时交通流混沌预测、高炉熔渣粘度预测、汇率预测、价格预测、函数逼近等

Rbf神经网络的主要应用:

函数逼近、短时交通流预测、模式识别、降水预测、民航客运量预测、遥感影像分析、声纹识别、语言识别、人脸识别、车牌识别、汇率预测

Hopfield网络应用:

车牌识别、图像识别、遥感影像分类、字母识别、交通标志识别、优化计算中的应用、联想记忆存储器的实现、

2 BP编程算法:

2.1 利用样本训练一个BP网络

注:此程序自李国勇书中学习而来

程序部分:

function [ output_args ] = bp( input_args )

%UNTITLED Summary of this function goes here

% Detailed explanation goes here

%此设计为两层BP神经网络,3输入,3隐含层节点,两个输出

%初始化部分:

lr=0.05; %%需要给定学习速率

error_goal=0.001; %期望的误差

max_epoch=100000; %训练的最大步长

a=0.9; %惯性系数

Oi=0;

Ok=0;

%给两组输入,以及目标输出:

X=[1 1 1;-1 -1 1;1 -1 1;]; %随便给一组输入输入,训练BP网络

T=[1 1 1 ;1 1 1];

%X=-1:0.1:1; %输入范围

%T=sin(pi*X);

%X=[]

q=3; %隐含层的节点数自己定义,在此给3个

%初始化

[M,N]=size(X); %输入节点个数为M,N为样本数

[L,N]=size(T); %输出节点个数为L

wij=rand(q,M); %先给定加权系数一组随机值

wki=rand(L,q);

wij0=zeros(size(wij)); %加权系数矩阵的初始值

wki0=zeros(size(wki));

for epoch=1:max_epoch %计算开始

NETi=wij*X; %各个隐含层的净输入

for j=1:N

for i=1:q

Oi(i,j)=2/(1+exp(-NETi(i,j)))-1; %再输入作用下,隐含层的输出

end

end

NETk=wki*Oi; %各个输出层的净输入

for i=1:N

for k=1:L

Ok(k,i)=2/(1+exp(-NETk(k,i)))-1; %在输入作用下,输出层的输出end

end

E=((T-Ok)'*(T-Ok))/2; %性能指标函数,就是误差

if(E

%不满足的话,就要修正加权系数else

deltak=Ok.*(1-Ok).*(T-Ok); %计算△k

w=wki;

wki=wki+lr*deltak*Oi'+a*(wki-wki0);

wki0=w;

deltai=Oi.*(1-Oi).*(deltak'*wki)'; %计算△i

w=wij;

wij=wij+lr*deltai*X'+a*(wij-wij0);

wij0=w;

end

epoch %当前是第多少步

X1=X; %保护当前的输入

NETi=wij*X1; %再一次计算隐含层的输入输出for j=1:N

for i=1:q

Oi(i,j)=2/(1+exp(-NETi(i,j)))-1; %

end

end

NETk=wki*Oi; %再一次计算输出层的输出

for i=1:N

for k=1:L

Ok(k,i)=2/(1+exp(-NETk(k,i)))-1;

end

end

%直到误差满足要求才跳到此步,输出修正的输出值

Oi %

Ok %最终满足误差要求下的输出

wij %输出输入层与隐含层的最终修改后的权值

wki %输出隐含层与输出层之间的取值

end

仿真结果:

epoch = 8

Oi =

0.9690 -0.4804 0.9995

0.9995 0.9244 0.9989

0.9734 0.9991 0.9356

Ok =

1.0000 1.0000 1.0000

0.9982 0.9658 0.9981

wij =

3.5796 2.0282 2.5985

5.3497 -0.4644 2.5773

5.5337 -0.4516 -1.6788

wki =

1.5490 6.1430 5.8803

2.0593 1.3288

3.8144

由仿真结果可以看出,网络在第八步就可以得到满足误差函数的输出,输出时OK。由于初始权值是随机给定的,因此每次运行结果可能有所差异。

2.2用BP网路逼近sin函数:

function [ output_args ] = BP1( input_args )

%UNTITLED Summary of this function goes here

% Detailed explanation goes here

%P=[0 1 2 3 4 5 6 7 8 9 10];

%T=[0 1 2 3 4 3 2 1 2 3 4];

P=-1:0.1:1; %输入范围

T=sin(pi*P); %样本值

net=newff([0 10],[5,1],{'tansig','purelin'}); %建立网络

%net=newff([0 10],[5,1],{'tansig','purelin'},'traingd','learngd','msereg');

%net=newff([0 10],[5,1],{'tansig','purelin'},'traingdx','learngd','msereg');

net.trainParam.epochs=200; %训练步长为200

net=train(net,P,T); %开始训练

figure;

Y=sim(net,P); %输入下网络的输出

plot(P,T,'+',P,Y,'o') %将样本与实际输出作图显示

end

逼近结果:

相关文档
最新文档