Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 人工智能 > 深度神经网络/深度学习
深度神经网络/深度学习 A discussion board for Deep Neural Network|Deep Learning.
回复
 
主题工具 显示模式
旧 2011-05-21, 10:03   #1
我为股狂
初级会员
 
注册日期: 2011-05-21
帖子: 1
声望力: 0
我为股狂 正向着好的方向发展
默认 将我的程序具体的每一步标明是干什么的

下面的是我的Rbf神经网络设计的程序:其中有几个我是摘抄过来的,有不懂的地方请高手把我的程序的每一步都注释出来。我的邮箱是[email protected].谢谢。
clear all
clc
aa=[-5.28 3.39 4.11 13.60 -8.46 3.02 3.46 13.20 -7.74 3.92 4.64 10.95 -17.32 3.92 4.64 28.13 43.03];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
m=4; %%%%%%%%%%%%%%%%%%%%m为输入向量维数
for i=1:(length(aa)-m)
for j=1:m
x(i,j)=aa(i+j-1);%%%%%%%%%%%%%%%%%%%%%%%%%%%把aa转换成矩阵x
end
end
x=x';
for i=1:(length(aa)-m)
y(i)=aa(i+m);
end
y=y'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%y为期望输出
c=x; %%%%%%%%%%%%%%%%%%%%%%%%%%%c为初始中心矢量
[NN,n]=size(x);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%采用二进制编码,编制初始控制基因码 ,群体个数为50 %%%%%%%%%%%%%%%%%%%%
%%%用随机的方法生成50组控制基因
r=200;%%%%%%%r为群体个数,设为50
suiji=round(rand(n,r));%%%%%%%%%%%%%随机生成的n×50(元素为0、1)的控制基因矩阵,

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 选取网络宽度 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
z=0;
for i=1:n
for j=1:n
if i~=j
d(z+1)=norm(x(:,i)-x(:,j));
z=z+1;
end
end
end
kuan=max(d)/sqrt(2*n);
kuandu=(0.8*(rand(1,n))+1)*kuan;%%%%%在宽度合理的估计区间内随机选取n个宽度,
%%%%%这些宽度由下面的控制基因控制。
%%%%%%%%%%%%%%%%%%%%%%%%%%% 对控制基因进行解码,并计算回归矩阵 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for k=1:400 %%%%%%规定最大进化次数为200次(是本程序的最外层循环)。

for t=1:r %%%%%%%%r为群体个数,此循环为第2层循环,在这层循环中会计算出,
%%%%%%%%第k代基因控制下的网络参数、网络权值和网络的相对误差。
cc=c(:,find(suiji(:,t))); %%%%%%对中心进行解码
kuandu1=kuandu(:,(find(suiji(:,t)))');%%%%%%%%%%%对宽度进行解码

%%%%%%%在中心和宽度已知的条件下,计算回归矩阵
for i=1:n %%%%%%%%%n为输入向量个数
for j=1:length(kuandu1) %%%%%%length(kuandu1)为中心向量个数,
p(i,j)=exp(-(norm(x(:,i)-cc(:,j),1))/(kuandu1(j)^2));%建立回归矩阵p,选高斯函数作为基函数,
end %%其中x(:,i)为样本向量,cc(:,j)为中心向量
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%确定网络的权值%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%在中心和宽度已知的情况下,用最小二乘法计算权值
w=pinv(p)*y; %最小二乘法调整权值向量w

%%%%%%%%%%%%%%%%%%%%%%%计算网络的相对误差%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

wucha(t)=norm(y'-(p*w)',1)/norm(y',1);%%%%%%%%%求出相对误差

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% 检查网络的相对误差是否满足条件,如果满足则跳出两层循环;
%%%%%% 如果不满足条件,则对50个控制基因进行选择、交叉、变异。
if wucha(t)<0.01 %%%%%%%如果相对误差小于0.01,跳出内层循环,如果条件不满足,继续执行下面的选择、交叉、变异
pp=p;
ww=w;
break
end
end
if min(wucha)<0.01 %%%%%%%%如果条件满足,跳出最外层循环,如果条件不满足,继续执行下面的选择、交叉、变异
pp1=pp;
ww1=ww;
break

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 选择 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for t=1:r %%%%%r为群体个数50
shiyingdu(t)=(1/wucha(1,t))'; %%%%%%计算适应度
end
g=round(49*rand(m,r)+1);%%%%%生成m×50的随机矩阵(元素为1-50内的整数)
for i=1:r %%%%%r为群体个数50
for j=1:m
if shiyingdu(g(j,i))==max(shiyingdu((g(:,i))')) %%%%%% 对控制基因进行选择,使用的是联赛选择方法,
%%%%%%其思想是从群体中任意选择4个个体,
dd(1,i)=g(j,i); %%%dd为选择的50个个体 %%%%%%其中适应度最高的个体保存到下一代。
end %%%%% 这一过程反复执行,直到保存到下一代
end %%%%% 的个体达到预先设定的数目(50)为止。
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 交叉 %%%%%%%%%%%%%%%%%%%%%%%%
q=round((n-1)*rand(1,1)+1); %%%%在1-n间随机取1个整数
for i=1:q
aa=suiji(:,dd(i)); %%%%% 交叉:在这里实行单点交叉。具体操作是:
bb=suiji(:,dd(51-i)); %%%% 在个体基因串中随机设定一个交叉点,实
suiji(:,i)=[(aa(1:q));(bb(q+1:n))]; %%%% 行交叉时,该点前或后的两个个体的部分结构
suiji(:,51-i)=[(bb(1:q));(aa(q+1:n))]; %%%% 进行互换,并生成两个新个体。
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 变异 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:r
q=round((n-1)*rand(1,1)+1); %%%%在1-n间随机取1个整数 %%%% 变异:在这里采取基本变异算子。其具体操作是:
%%%% 对群体中基因链码随机挑选一个基因位置
if suiji(q,i)==0 %%%% 并对这个基因位置的基因值取反,即0变成1,1变成0。
suiji(q,i)=1;
else
suiji(q,i)=0;
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 绘制期望输出与网络输出的拟合曲线 %%%%%%%%%%%%%%
h=1:n;
z=y'; %%%%%期望输出
o=(pp1*ww1)'; %%%%实际输出
subplot(111)
plot(h,z,'r-*',h,o,'b-*')
legend('期望输出','网络输出');
title('期望输出与网络输出的拟合曲线');
xlabel('横轴(2007年1季度-2011年2季度)');
ylabel('纵轴(期望输出与网络输出的对比曲线)');
grid on
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%进行单步预测
x1=[3.92 4.64 28.13 43.03]';%(2010年9月-2010年12月)4维预测输入数据
for j=1:length(cc)
p1(j,1)=exp(-(norm(x1-cc(:,j)))^2/(kuandu1(j)^2));
end
yuecejieguo=(p1(:,1))'*ww1 %%%%%预测的结果
我为股狂 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 03:05


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.