• matlab工具箱如何设置自己的BP神经网络初始权重


    原创文章,转载请说明来自《老饼讲解-BP神经网络》:bp.bbbdata.com

    关于《老饼讲解-BP神经网络》:

    本网结构化讲解神经网络的知识,原理和代码。

    重现matlab神经网络工具箱的算法,是学习神经网络的好助手。 


    目录

        01.问题   

        02. 思路   

         03. Demo展示   

       Demo代码   

       输出结果   


    本文讲解,在matlab工具箱中设置BP神经网络的初始权重。

        01.问题   


    在使用matlab工具箱训练BP神经网络时,
    往往我们希望,
    能使用自己的初始值进行训练,而不是工具箱自带的初始值。
    那么,我们要怎么实现呢?



        02. 思路   


    其实只需要在初始化好BP神经网络,
    先修改网络的权重,
    然后再训练就可以了。


     ✍️网络的权重怎么修改?
     网络的权重存放在net.iw、net.b、net.lw里。
    我们要修改的就是这三个变量。
    其中,net.iw存放着输入层到第一层的权重 ,
    net.b则存放着每层的阈值, 
    net.lw是每层的权重。



         03. Demo展示   


    下面我们展示一个Demo,

    在Demo里,我们先给网络设置自己的权重,然后训练一步,

    可以看到,最终的权重就是根据我们设置的初始值进行调整的。

        Demo代码   


    已在matlab2018a亲测跑通

    1. % ================== 说明 ==============================================
    2. % 本代码来自bp.bbbdata.com
    3. %用于训练的数据
    4. X = linspace(-3,3,100);
    5. y = 10*sin(X);
    6. %初始化网络(这时的网络权重是matlab自带的初始化值)
    7. net = newff(X,y,3,{'tansig','purelin'},'trainlm');
    8. % 设置自己想要的权重的初始值
    9. disp('-------- 自设的网络初始权重 ---------------')
    10. init_w21 =[100,100,100]'
    11. init_b2 =[2,2,2]'
    12. init_w32 =[3,3,3]
    13. init_b3 = 4
    14. % 将初始值赋给网络
    15. net.iw{1,1} = init_w21 ; % 第1层(输入层)到第2层(隐层)的权值
    16. net.b{1} = init_b2 ; % 第2层(隐层)的阈值
    17. net.lw{2,1} = init_w32 ; % 第2层(输入层)到第3层(输出层)的权值
    18. net.b{2} = init_b3 ; % 第3层(输出层)的阈值
    19. % 训练网络,这里我们设置只训练一步
    20. net.trainparam.goal = 0.00001; % 设置训练误差目标
    21. net.trainparam.epochs = 1; % 设置最大训练次数.
    22. [net,tr,net_y] = train(net,X,y); % 训练
    23. % 训练完成后,可以看到,最终的权重值,与我们预设的初始差不多,因为我们只训练了一步。
    24. disp('-------- 网络训练后的权重 ---------------')
    25. w21 = net.iw{1,1} % 第1层(输入层)到第2层(隐层)的权值
    26. b2 = net.b{1} % 第2层(隐层)的阈值
    27. w32 = net.lw{2,1} % 第2层(输入层)到第3层(输出层)的权值
    28. b3 = net.b{2} % 第3层(输出层)的阈值


       输出结果   


    1. -------- 自设的网络初始权重 ---------------
    2. init_w21 =
    3.    100
    4.    100
    5.    100
    6. init_b2 =
    7.      2
    8.      2
    9.      2
    10. init_w32 =
    11.      3     3     3
    12. init_b3 =
    13.      4
    14. -------- 网络训练后的权重 ---------------
    15. w21 =
    16.    99.1931
    17.    99.1931
    18.    99.1931
    19. b2 =
    20.     1.8573
    21.     1.8573
    22.     1.8573
    23. w32 =
    24.     0.2169    0.2169    0.2169
    25. b3 =
    26.     0.0040


    👉可以看到,网络的最终输出与我们的设置的初始值很相近,

    说明网络的确是使用了我们的初始值进行训练的。


    相关文章

    ​《BP神经网络梯度推导》

    ​​​​​​《BP神经网络提取的数学表达式》

    《一个BP的完整建模流程》

  • 相关阅读:
    Java【String】【StringBuilder】【StringBuffer】 用法
    Hadoop Distributed System (HDFS) 写入和读取流程
    CentOS安装kafka单机部署
    数学建模 —— 常见的数学运算函数
    linux PVE安装
    windows jenkins
    小程序使用分包
    Jetson-XAVIAR NX 上编译tensorflow-lite
    Mysql专题
    【数据结构与算法——C语言】“串操作与算法”之“找出最长串及其长度”
  • 原文地址:https://blog.csdn.net/dbat2015/article/details/126610492