给BP神经网络设置初始权重(matlab)

原创文章,转载请说明来自《老饼讲解-BP神经网络》:www.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亲测跑通

% ================== 说明 ==============================================
% 本代码来自bp.bbbdata.com

%用于训练的数据
X = linspace(-3,3,100);   
y = 10*sin(X);   

%初始化网络(这时的网络权重是matlab自带的初始化值)
net = newff(X,y,3,{'tansig','purelin'},'trainlm');

% 设置自己想要的权重的初始值
disp('-------- 自设的网络初始权重 ---------------')
init_w21 =[100,100,100]'
init_b2  =[2,2,2]'
init_w32 =[3,3,3]
init_b3  = 4

% 将初始值赋给网络
net.iw{1,1} = init_w21 ;               % 第1层(输入层)到第2层(隐层)的权值
net.b{1}    = init_b2  ;               % 第2层(隐层)的阈值
net.lw{2,1} = init_w32 ;               % 第2层(输入层)到第3层(输出层)的权值
net.b{2}    = init_b3  ;               % 第3层(输出层)的阈值


% 训练网络,这里我们设置只训练一步
net.trainparam.goal   = 0.00001;  % 设置训练误差目标
net.trainparam.epochs = 1;        % 设置最大训练次数.
[net,tr,net_y] = train(net,X,y);  % 训练

% 训练完成后,可以看到,最终的权重值,与我们预设的初始差不多,因为我们只训练了一步。
disp('-------- 网络训练后的权重 ---------------')
w21  =  net.iw{1,1}               % 第1层(输入层)到第2层(隐层)的权值
b2   =  net.b{1}                  % 第2层(隐层)的阈值
						          
w32  =  net.lw{2,1}               % 第2层(输入层)到第3层(输出层)的权值
b3   =  net.b{2}                  % 第3层(输出层)的阈值


   输出结果   


-------- 自设的网络初始权重 ---------------

init_w21 =

   100
   100
   100


init_b2 =

     2
     2
     2

init_w32 =

     3     3     3

init_b3 =

     4

-------- 网络训练后的权重 ---------------

w21 =

   99.1931
   99.1931
   99.1931


b2 =

    1.8573
    1.8573
    1.8573

w32 =

    0.2169    0.2169    0.2169

b3 =

    0.0040


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

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


相关文章

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

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

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

  • 10
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老饼讲解-BP神经网络

请老饼喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值