神经网络作业函数逼近
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
神经网络作业(函数逼近)
————————————————————————————————作者: ————————————————————————————————日期:
ﻩ
智能控制理论及应用作业
1资料查询
BP 神经网络的主要应用:
人脸识别、风电功率预测、短时交通流混沌预测、高炉熔渣粘度预测、汇率预测、价格预测、函数逼近等
Rbf神经网络的主要应用:
函数逼近、短时交通流预测、模式识别、降水预测、民航客运量预测、遥感影像分析、声纹识别、语言识别、人脸识别、车牌识别、汇率预测
Hopfield网络应用:
车牌识别、图像识别、遥感影像分类、字母识别、交通标志识别、优化计算中的应用、联想记忆存储器的实现、
2BP编程算法:
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=[111;-1-11;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
fori=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;%再一次计算输出层的输出 fori=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.92440.9989 0.9734 0.99910.9356 Ok = 1.00001.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 goeshere % Detailed explanation goeshere %P=[01 2 3 45678 910]; %T=[0 1234 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([010],[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 逼近结果: