• BP人工神经网络-反向传播法


    0 网络计算结果

      B(m)=f( n( W(n,m)*X(n) ) + Θ(m) )  %中间层的输出

      Y(k)=f( m( V(m,k)*B(m) ) + ф(k) )  %输出层的输出

    1 计算误差值

      E(k)=Y'(k)-Y(K)    %Y'表示样本真实的输出值

    2 计算校正误差

      dV(k)=E(K) * Y(k) * ( 1-Y(k) )* [学习率]

      dW(m)=k( dV(k) * V(m,k) ) * B(m) * ( 1-B(m) ) * [学习率]

    3 误差校正

      V(m,k)=V(m,k) + dV(k) * B(m)

      W(n,m)=W(n,m) + dW(m) * X(n)

      ф(k)=ф(k) + dV(k) * [学习率]

      Θ(m)=Θ(m) +  dW(m)* [学习率]

    4 matlab代码

      

    %% 构建人工神经网络
    % input_train,网络的输入,1500个样本,每个样本24个因子
    % output_train,网络的输出,与输入样本数相同为1500个,每个输出有4个因子
    
    in_num=24;%输入的因子数
    mid_num=25;%中间层的个数
    out_num=4;%输出的因子数
    
    W1=rands(mid_num,in_num);%每个输入对中间层的权重
    TD1=rands(1,mid_num);%中间层的阈值
    W2=rands(out_num,mid_num);%中间层对输出的权重
    TD2=rands(1,out_num);%输出的阈值
    
    %学习率
    xite=0.1;%权重的学习率
    alfa=0.01;%阈值的学习率
    
    loop_num=100;%训练迭代的次数
    
    %% 网络训练
    for loop=1:loop_num
        for index=1:1500
            input=input_train(index,:);
            % 计算中间层输出
            mid_out=input*W1'+TD1;
            mid_out=1./(1+exp(-mid_out));
            % 计算网络的输出
            output=mid_out*W2'+TD2;
            output=1./(1+exp(-output));
            % 计算权重的下降梯度
            E= output_train(index,:) - output;
            dW2 = E .* output .* (1 - output) * xite;
            dW1 = dW2 * W2 .* mid_out .* (1-mid_out) * xite;
            % 更新权重
            W2=W2 + diag( dW2) * repmat(mid_out,out_num,1);
            W1=W1 + diag(dW1) * repmat(input,mid_num,1);
            % 更新阈值
            TD2=TD2+dW2*xite;
            TD1=TD1+dW1*xite;
        end
    end
    

     代码与示例数据

    http://download.csdn.net/detail/long7782/8112627

  • 相关阅读:
    红黑树的修正过程
    配置文件elasticsearch.yml详解
    HEAD插件安装
    css reset.css
    vue-router之router-link
    vue2.0 代码功能片段
    vue2.0的常用功能简介
    electron 的中文文档的地址 以及 窗口改变的步骤
    ph 的使用步骤
    git 提交的步骤
  • 原文地址:https://www.cnblogs.com/qiusuo/p/4067285.html
Copyright © 2020-2023  润新知