当前位置:   article > 正文

双隐含层bp神经网络算法优化代码_神经网络连载(四)

双层bp网络如何优化

BP网络的产生主要是误差的反向传播,根据输出函数和目标函数的误差来修正权值和阈值。现在就给大家讲讲标准梯度下降法修正权值和阈值具体算法实现。以三层结构(输入层-隐含层-输出层)的模型为案例进行讲解:    

一:BP神经网络

b12136a0fabeb3f53d88ce7df0a86aec.png

输入层-隐含层-输出层

现在给出模型构建所需的参数

     cb7a3db799af1092c545a685ecebd157.png             

133ce111a027f2e98f69e03ea8c58027.png    

28a55ca4e078db2a0329bb956fa3d313.png

906cafd352ab558457e51efd415c90e2.png

     58a1ec635fedbfcb2bd40aa2d0c856a1.png       

 59040a5bf02f7a93ba25e2d8f6b86f1c.png

9f5cd6694488ad8db396c8e7d472ab42.png

2de98557a0d7b410e1c1d3afe7fba23e.png

               e8e9bcbf9319f874591d339c63024d77.png             

    9b16c51a4408c466aeffa1a9a9c25bdc.png      

    66f376945487fb875defde09b1ba5154.png

    7959efb3fbcf3d53de3395ddc7f812ff.png      

                                                   755e75e1059832bb63fef18a10e5b981.png                                             83652fa642d5cec772962435fac61fe3.png

                fb08cc8515ba4718fb516abf8cd5e7f3.png                 

5d208581261e1438cdc0e1166019f3d5.png

             653f8d1801de6836c594e1b5fe1d7e77.png        

         5d812a1c803f2b5a6602fd67b8cc5f17.png

根据模型,隐含层中神经元的输出为:

86755ba9c0e06db5ab305737c82e4a61.png

输出层中神经的输出为:

f90a35ae9bf952490bef793c4b78d5d6.png

定义误差函数为:

539c1d8f48858293083857aca547cf51.png

二:权值阈值的更新

  权值和阈值的变化率涉及到矩阵的求导,关于矩阵运算的基本规则、会在后期单独介绍,在此就不介绍矩阵求导规则。

输出层的权值、阈值梯度变化:

b17ad0acbee99bb5f77f4233cfe74fa5.png

b0dc24bdd9251ca71839d1732f22ac59.png

4d883fa1f8fa83a58d52aba36f1d5741.png

e52680a7773bdbbbe8b44edfb8026042.png

隐含层的权值、阈值梯度变化:

a798931cc856cad27f7dc1a19d90d4ca.png

0c1fd83bfcbea2d7c7d08f8c4645c727.png

4f3b1a1b9655a233be21d49c7ec44919.pngb8c94ef29f351091c18a183cc06314e4.png

  将权值和阈值的变化值加到权值阈值上即可得到权值阈值的更新值,经过不断训练即可得到使得误差最小的权值、阈值。

c372d4c0e69e36c31198e15fb0acf99e.png

此方法是BP网络训练权值、阈值的最初的方法,随着对人工网络的深入研究,基于标准梯度下降法又提出了附加动量的bp算法、可变学习速率的bp算法、拟牛顿法等。请持续关注MATLAB爱好者公众号,作者会持续更新关于权值阈值的学习算法。

5cba00c42eea10e97b4c2fa475c02d1c.png

误差变化图

三:标准梯度下降法MATLAB代码

现给出单隐含层和双隐含层的权值阈值学习代码案例:

clear allP=[0.1 0.3 0.14 0.5 ;0.2 0.5 0.2 0.10.3 0.6 0.6 0.2;0.4 0.7 0.1 0.30.1 0.4 0.6 0.6];T=[0.5;0.6;0.3;0.4;0.2];W1=rand(3,4) ; B1=rand(3,1)*ones(1,5);W2=rand(1,3) ; B2=ones(1,5)*rand(1,1);x=W1*P'+B1;fx='tansig(x)';A1=eval(fx);y=W2*A1+B2;fy='purelin(y)';A2=eval(fy);E=T'-A2;SSE=sumsqr(E);fyd=ones(1,5);Lp.lr= 0.0028;M=cell(4,25);for epoch=1:100;    dW2=0.0028*((E.*fyd).*ones(1,5))*pinv(A1);%0.0028:为设置的一个常数系数,表示下降速率;fyd为purelin的导数    dB2=0.0028*((E.*fyd).*ones(1,5));%0.0028*((E.*fyd):为系数所以点成的形式乘以矩阵    dW1=0.0028*(((((ones(3,1)*(E.*fyd))).*((4*exp(-2*A1))./(exp(-2*A1) + 1).^2))*ones(5,1)).*pinv(W2))*ones(1,5)*pinv(P');%((4*exp(-2*A1))./(exp(-2*A1) + 1).^2)为tansig函数的导数    dB1=0.0028*(((((ones(3,1)*(E.*fyd))).*((4*exp(-2*A1))./(exp(-2*A1) + 1).^2))*ones(5,1)).*pinv(W2))*ones(1,5);    W1=W1+dW1;    B1=B1+dB1;    W2=W2+dW2;    B2=B2+dB2;    x=W1*P'+B1;    fx='tansig(x)';    A1=eval(fx);    y=W2*A1+B2    fy='purelin(y)'    A2=eval(fy);    E=T'-A2;    SSE=sumsqr(E);    M{epoch}=SSEend

往期相关推荐(点击下方文字直接访问)

神经网络连载(三)

神经网络连载(二)

神经网络连载(一)

9b6c898daeac53c6508cf763f8af1bce.png

本文作者:过冷水

a653a750b5c723127d1a16a5f58faf76.png 1c2541c62b2c2fe69ba0261dbd68c1d8.png c2b8ee1eb9b50d9803b0787fc78bedc1.png

ceb9bfe0fec73c2ee84e271559a36415.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/347975
推荐阅读
相关标签
  

闽ICP备14008679号