⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 experiment1_1.m

📁 采用BP算法进行函数拟合
💻 M
字号:
clear;clc;

MaxTrn=10000; % 训练次数
ita=0.4;      % 动量因子
alpha=0.2;    % 学习率
LayerSize=3;  % 层数
SizeOfL0=1;   % 输入层节点数,不包括域值节点
SizeOfL1=5;   % 隐层节点数,不包括域值节点
SizeOfL2=1;   % 输出层节点

bdown=0;      % 区间的下界
bup=3;        % 区间的上界
h=0.02;       % 采样间隔
Pop=floor((bup-bdown)/h)+1;


SmpPnt=bdown:h:bup;  % 采样点向量
SmpRslt=TargetFxn(SmpPnt);

W01=rand(SizeOfL0+1,SizeOfL1);
W12=rand(SizeOfL1+1,SizeOfL2);

tic
% 训练
W01delta=zeros(SizeOfL0+1,SizeOfL1);
W12delta=zeros(SizeOfL1+1,SizeOfL2);
for t=1:MaxTrn
  t  % 输出训练次数
  Sum01=zeros(SizeOfL0+1,SizeOfL1);
  Sum12=zeros(SizeOfL1+1,SizeOfL2);
  for p=1:Pop
    Y0=[1,SmpPnt(p)]';  % 第0层输出,并加域值
    X1=(W01')*Y0;       % 第1层输入
    Y1=[1;Sigmoid(X1)]; % 第1层输出,并加域值
    X2=(W12')*Y1;       % 第2层输入
    Y2=Sigmoid(X2);     % 第2层输出

    delta2=(Y2-SmpRslt(p))*dSigmoid(X2)';  % 第2层(delta2和delta1是数,写成行向量)
    EpYp=W12*delta2'; delta1=(dSigmoid(X1).*EpYp(2:SizeOfL1+1))';  % 第1层(EpYp表示Ep对Yp求偏微分的结果)

    Sum12=Sum12+Y1*delta2;
    Sum01=Sum01+Y0*delta1;
  end;

  W01delta=ita.*W01delta-alpha.*Sum01;
  W01=W01+W01delta;
  W12delta=ita.*W12delta-alpha.*Sum12;
  W12=W12+W12delta;
end;
toc

% 输出
for p=1:Pop
    YY0=[1,SmpPnt(p)]';   % 第0层输出
    XX1=(W01')*YY0;       % 第1层输入
    YY1=[1;Sigmoid(XX1)]; % 第1层输出,并加域值
    XX2=(W12')*YY1;       % 第2层输入
    YY2=Sigmoid(XX2);     % 第2层输出
    YY(p)=YY2;
end;
figure(1);
plot(SmpRslt,'g');hold on;plot(YY,'b');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -