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

📄 bp.m

📁 一个曲线拟合的bp神经网络程序
💻 M
字号:
function main()
    SamNum = 100;     %训练样本数
    TestSamNum = 101;    %测试样本数
    HiddenUnitNum = 10;  %隐节点数
    InDim =1;
    OutDim = 1;
    
    %根据目标函数获得样本输入输出
    rand('state',sum(100*clock))
    NoiseVar = 0.1;
    Noise = NoiseVar*randn(1,SamNum);
    SamIn = 8*rand(1,SamNum)-4;
    SamOutNoNoise = 1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2);
    SamOut = SamOutNoNoise + Noise;
    
    TestSamIn = -4:0.08:4;
    TestSamOut = 1.1*(1-TestSamIn+2*TestSamIn.^2).*exp(-TestSamIn.^2/2);
    
    figure
    hold on
    grid
    plot(SamIn,SamOut,'k+')
    plot(TestSamIn,TestSamOut,'k--')
    xlabel('Inputx');
    ylabel('Outputy');
    
    MaxEpochs = 200000;
    lr = 0.003;                                                           
    E0 = 0.5;
    W1 = 0.2*rand(HiddenUnitNum,InDim)-0.1;          %输入层到隐层的(0,0.1)初值
    B1 = 0.2*rand(HiddenUnitNum,1)-0.1;              %隐节点的初始阈值
    W2 = 0.2*rand(OutDim,HiddenUnitNum)-0.1;         %隐层到输出层的(0,0.1)之间的初值
    B2 = 0.2*rand(OutDim,1)-0.1;                     %输出层的初始阈值
    
    W1Ex = [W1 B1];
    W2Ex = [W2 B2];
    
    SamInEx = [SamIn' ones(SamNum,1)]';              %输入样本扩展
    ErrHistory = [];                            %记录权值调整后的训练误差
    
    for i=1:MaxEpochs
        %正向计算网络的各层输出
        HiddenOut = logsig(W1Ex*SamInEx);
        HiddenOutEx = [HiddenOut' ones(SamNum,1)]';
        NetWorkOut = W2Ex*HiddenOutEx;
        
        %判断训练是否停止
        Error = SamOut - NetWorkOut;
        SSE = SumSqr(Error);
        
        %记录每次权值调整后的训练误差
        ErrHistory = [ErrHistory SSE];
        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)
    
    %测试
    TestHiddenOut = logsig(W1*TestSamIn + repmat(B1,1,TestSamNum));
    TestNNOut = W2*TestHiddenOut + repmat(B2,1,TestSamNum);
    plot(TestSamIn,TestNNOut,'r-')
    
    %绘制学习误差曲线
    figure
    hold on
    grid
    [xx num] = size(ErrHistory);
    plot(1:num,ErrHistory,'b-');
        
            
    
    
    
    
    
    

⌨️ 快捷键说明

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