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

📄 bp2.m

📁 通过BP网络实现对非线性函数(正弦函数)的逼近。函数比较短
💻 M
字号:
clear;
clc;
SamNum = 81;                       % 训练样本数
HiddenUnitNum = 7;                 % 隐节点数
InDim = 1;                          % 样本输入维数
OutDim = 1;                         % 样本输出维数
SamIn = 0:0.025*pi:2*pi;
SamOut =sin(SamIn);
plot(SamIn,SamOut,'k+')
MaxEpochs = 20000;       %最大训练次数
% lr = 0.003;               %学习率
lr=0.001;
E0 = 0.1;              %目标误差
W1 = 0.2*rand(HiddenUnitNum,InDim);     %输入层到隐层的初始权值   7*1
B1 = 0.2*rand(HiddenUnitNum,1);         %隐节点初始偏移           7*1
W2 = 0.2*rand(OutDim,HiddenUnitNum);    %隐层到输出层的初始权值   1*7
B2 = 0.2*rand(OutDim,1);                %输出层初始偏移           1*1
W1Ex = [W1 B1];         %输入层到隐层的初始权值扩展
W2Ex = [W2 B2];         %隐层到输出层的初始权值
SamInEx = [SamIn' ones(SamNum,1)]';     %样本输入扩展
for i = 1:MaxEpochs
    %正向传播计算网络输出
    HiddenOut = logsig(W1Ex*SamInEx);
    HiddenOutEx = [HiddenOut' ones(SamNum,1)]';
    NetworkOut = W2Ex*HiddenOutEx;
    %停止学习判断
    Error = SamOut-NetworkOut;
    SSE = sumsqr(Error)/2;
    if SSE<E0, break, end
    
    %计算反向传播误差
    Delta2 = Error;
    Delta1 = W2'*Delta2.*HiddenOut.*(1-HiddenOut);
    
    %计算权值调节量
    dW2Ex = Delta2*HiddenOutEx';
    dW1Ex = Delta1*SamInEx';
    
    %权值调节
    W1Ex = W1Ex + lr*dW1Ex;
    W2Ex = W2Ex + lr*dW2Ex;
    
    %分离隐层到输出层的初始权值,以便后面使用
    W2 = W2Ex(:,1:HiddenUnitNum);
end
%显示计算结果
i
W1 = W1Ex(:,1:InDim)
B1 = W1Ex(:,InDim+1)
W2
B2 = W2Ex(:,1+HiddenUnitNum);
% 测试
hold on;
plot(SamIn,NetworkOut,'k-')

⌨️ 快捷键说明

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