深度学习网络层初始化时需要注意的点

在我的问题中,我刚开始使用的初始化函数是 tf.truncated_normal,与random_normal 函数不同,truncated_normal的范围限制在两个标准差之间,会把不符合条件的随机数丢弃。

当我将初始化函数换做tf.random_normal之后效果并没有好转,分析了原因,是因为我设置的每一层的权重初始化值都是tf.random_normal(shape, 0.0, 0.1),在梯度图中查看的时候,会发现有些层的最大值已经爆炸了,所以要根据每一层的最大值来设置每一层的初始化。下面是tensorboard中的梯度图:

要注意分析每一层中的最大值。例如刚开始层的初始值的方差是0.1,这一层的梯度最大值是几十万或者几万,肯定是梯度爆炸的,你需要将方差调小一些。另外调整了这一层之后有可能会对后面的层有影响,需要自行观察之后再重新调节。

tensorboard中的histogram数值基本正常之后,也就是初始化层正常,但是还没有开始学习,那就是需要调节学习率,调好学习率之后,再自行调节其他的超参数,例如图像占比等。

 

下面是我在网上找到的一些理论性解释,有助于帮助理解网络初始化的重要性。

 

如下的理论性解释参考的是https://www.cnblogs.com/chason95/articles/10711017.html

训练神经网络的时候需先给定一个初试值,然后才能通过反向传播等方法进行参数更新。所以参数的初始化起着至关重要的作用

1.全0初始化:不能这么做

做会导致所有参数都无法被更新。

2.全相同常数初始化:不能这么做

下图的转载地址为:https://www.cnblogs.com/makefile/p/init-weight.html?utm_source=itdadao&utm_medium=referral

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值