人工神经网络Matlab实现代码Word文档格式.docx
- 文档编号:8432490
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:4
- 大小:14.98KB
人工神经网络Matlab实现代码Word文档格式.docx
《人工神经网络Matlab实现代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《人工神经网络Matlab实现代码Word文档格式.docx(4页珍藏版)》请在冰点文库上搜索。
%%%%%隐含层输入
bout=rand(1,defaultpoints);
%%%%隐含层输出
base1=0*ones(1,defaultpoints);
%隐含层阈值,初始化为0
cin=rand(1,outputpoints);
%%%%%%输出层输入
cout=rand(1,outputpoints);
%%%%%输出层输出
base2=0*rand(1,outputpoints);
%%输出层阈值
error=zeros(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大于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);
%样本输入矩阵
y1=zeros(sampleNUM,outputpoints);
%样本输出矩阵
x2=zeros(sampleNUM,inputpoints);
%测试输入矩阵
y2=zeros(sampleNUM,outputpoints);
%测试输出矩阵
observeOUT=zeros(sampleNUM,outputpoints);
%%拟合输出监测点矩阵
i=0;
j=0;
k=0;
%%%%其中j是在一个训练周期中的样本点序号,不可引用
h=0;
o=0;
%%%%输入层序号,隐含层序号,输出层序号
x=0:
0.2*pi:
2*pi;
%%%%步长
forj=1:
9%%%%%%这里给样本输入和输出赋值,应根据具体应用来设定
x1(j,1)=x(j);
y1(j,1)=sin(x1(j,1));
end
2*pi/361:
361
x2(j,1)=x(j);
y2(j,1)=sin(x2(j,1));
foro=1:
outputpoints
y1(:
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(:
fori=1:
inputpoints
x1(:
i)=(x1(:
i)-min(x1(:
i)))/(max(x1(:
i))-min(x1(:
i)));
%输入数据归一化范围要和输出数据的范围相同,[0,1]
x2(:
i)=(x2(:
i)-min(x2(:
i)))/(max(x2(:
i))-min(x2(:
sampleNUM=9;
formmm=1:
trainingROUND%训练开始,100次
error_sum=0;
ifmmm==trainingROUND
sampleNUM=361;
end
sampleNUM%%%%%每次训练一个样本点
fori=1:
inputpoints%%%%%样本输入层赋值
a(i)=x1(j,i);
end
foro=1:
outputpoints%%%%%样本输出层赋值
y(o)=y1(j,o);
ifmmm==trainingROUND
fori=1:
a(i)=x2(j,i);
end
foro=1:
y(o)=y2(j,o);
end
forh=1:
defaultpoints
bin(h)=0;
fori=1:
bin(h)=bin(h)+a(i)*w(i,h);
end
bin(h)=bin(h)-base1(h);
bout(h)=1/(1+exp(-bin(h)));
%%%%%%隐含层激励函数为对数激励
temp_error=0;
cin(o)=0;
forh=1:
cin(o)=cin(o)+bout(h)*v(h,o);
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)=gama*error(o);
Testerror(j)=temp_error;
error_sum=error_sum+Testerror(j);
foro=1:
error_rate_cin(o)=error(o)*cout(o)*(1-cout(o));
defaultpoints
error_rate_bin(h)=0;
foro=1:
error_rate_bin(h)=error_rate_bin(h)+error_rate_cin(o)*v(h,o);
error_rate_bin(h)=error_rate_bin(h)*bout(h)*(1-bout(h));
defaultpoints
base1(h)=base1(h)-5*error_rate_bin(h)*bin(h);
%%%%base1变化不影响最小误差,但是可以抑制由于过多训练产生的发散效果
foro=1:
v(h,o)=v(h,o)+alfa*error_rate_cin(o)*bout(h);
%可能要改,正负号?
%base1(i)=base1(i)+0.01*alfa*error(i);
w(i,h)=w(i,h)+belt*error_rate_bin(h)*a(i);
%可能要改,正负号?
%base2=base2+0.01*belt*out_error;
%%%%%%%%一轮训练结束
if(error_sum<
0.01)
%%%%error_sum中记录一轮训练中所有样本的所有输出和拟合输出值差值平方和
break;
end%//训练结束
figure
plot(x(1:
sampleNUM),Testerror(1:
sampleNUM),'
r+'
)
holdon
sampleNUM),y2(1:
sampleNUM,1),'
*'
sampleNUM),observeOUT(1:
o'
ylabel(num2str(mmm));
xlabel(num2str(error_sum));
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工 神经网络 Matlab 实现 代码