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

📄 bp222.m

📁 BP算法源代码(MATLAB)
💻 M
字号:
function [a i sse]=bp222(n,m,l,lr,f)
%三层bp网络学习算法
%选择不同的节点个数和学习速率
%n为输入层节点个数
%m为中间隐层的节点个数
%l为输出层节点个数
%lr为学习速率:');
%f为转移函数(1为logsig,2为tansig)
%学习数据和目标向量
p=-ones(n,3);
t=ones(l,3);
%没有指定学习数据和目标向量,我就随便写了
% 初始化
[w1 b1]=rands(m,n);
[w2 b2]=rands(l,m);
%定义网络的训练参数
err_goal=0.0001;
max_epoch=20000;
%训练
[dw1,db1]=rands(m,n);
[dw2,db2]=rands(l,m);
mc=0.5;
nntwarn off;
switch f
    case 1
        for i=1:max_epoch
            %工作信号正向传播
            a1=logsig(w1*p,b1);
            a2=logsig(w2*a1,b2);
            %误差信号反向传播
            e=t-a2;
            d2=deltalog(a2,e);
            d1=deltalog(a1,d2,w2);
            [dw1,db1]=learnbpm(p,d1,lr,mc,dw1,db1);
            [dw2,db2]=learnbpm(a1,d2,lr,mc,dw2,db2);
            w1=w1+dw1;
            b1=b1+db1;
            w2=w2+dw2;
            b2=b2+db2;
            sse=sumsqr(t-logsig(w2*logsig(w1*p,b1),b2));
            if sse<err_goal
                break
            end
        end
        a=simuff(p,w1,b1,'logsig',w2,b2,'logsig');
    case 2
        for i=1:max_epoch
            %工作信号正向传播
            a1=tansig(w1*p,b1);
            a2=tansig(w2*a1,b2);
            %误差信号反向传播
            e=t-a2;
            d2=deltatan(a2,e);
            d1=deltatan(a1,d2,w2);
            [dw1,db1]=learnbpm(p,d1,lr,mc,dw1,db1);
            [dw2,db2]=learnbpm(a1,d2,lr,mc,dw2,db2);
            w1=w1+dw1;
            b1=b1+db1;
            w2=w2+dw2;
            b2=b2+db2;
            sse=sumsqr(t-tansig(w2*tansig(w1*p,b1),b2));
            if sse<err_goal
                break
            end
        end
        a=simuff(p,w1,b1,'tansig',w2,b2,'tansig');
    otherwise
        warning('请正确选择转移函数')
        return
end

⌨️ 快捷键说明

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