tensorflow 参数初始化

        对于某⼀个神经元来说,需要初始化的参数有两类:⼀类是权重W,还有 ⼀类是偏置b,偏置b初始化为0即可。⽽权重W的初始化⽐较重要,我们着 重来介绍常⻅的初始化⽅式。

 

1.随机初始化

        随机初始化从均值为0,标准差是1的⾼斯分布中取样,使⽤⼀些很⼩的值 对参数W进⾏初始化。

2.标准初始化

        权重参数初始化从区间均匀随机取值。即在(-1/√d,1/√d)均匀分布中⽣成当 前神经元的权重,其中d为每个神经元的输⼊数量。

3.Xavier初始化

        该⽅法的基本思想是各层的激活值和梯度的⽅差在传播过程中保持⼀致, 也叫做Glorot初始化。在tf.keras中实现的⽅法有两种:

         正态化Xavier初始化: Glorot 正态分布初始化器,也称为 Xavier 正态分布初始化器。它从以 0 为中⼼,标准差为 stddev = sqrt(2 / (fan_in + fan_out)) 的正 态分布中抽取样本, 其中 fan_in 是输⼊神经元的个数, fan_out 是输出的神经元个数。

实现⽅法为:

# 导⼊⼯具包 
import tensorflow as tf 
# 进⾏实例化 
initializer = tf.keras.initializers.glorot_normal() 
# 采样得到权重值 
values = initializer(shape=(9, 1)) 
# 打印结果
print(values) 
输出结果为: 
tf.Tensor( 
[[ 0.71967787] 
 [ 0.56188506] 
 [-0.7327265 ] 
 [-0.05581591] 
 [-0.05519835] 
 [ 0.11283273]
 [ 0.8377778 ]
 [ 0.5832906 ]
 [ 0.10221979]], shape=(9, 1), dtype=float32) 

        标准化Xavier初始化 Glorot 均匀分布初始化器,也称为 Xavier 均匀分布初始化器。它从 [- limit,limit] 中的均匀分布中抽取样本, 其中 limit 是 sqrt(6 / (fan_in + fan_out)) , 其中 fan_in 是输⼊神经元的个数, fan_out 是输出的神经元个数。

# 导⼊⼯具包 
import tensorflow as tf 
# 进⾏实例化 
initializer = tf.keras.initializers.glorot_uniform() 
# 采样得到权重值 
values = initializer(shape=(9, 1)) 
# 打印结果 
print(values) 
输出结果为:
tf.Tensor( 
[[-0.59119344]
 [ 0.06239486]
 [ 0.65161395]
 [-0.30347362]
 [-0.5407096 ]
 [ 0.35138106]
 [ 0.41150713]
 [ 0.32143414]
 [-0.57354397]], shape=(9, 1), dtype=float32) 

        4.He初始化 he初始化,也称为Kaiming初始化,出⾃⼤神何恺明之⼿,它的基本思想 是正向传播时,激活值的⽅差保持不变;反向传播时,关于状态值的梯度 的⽅差保持不变。在tf.keras中也有两种:       

         正态化的he初始化 He 正态分布初始化是以 0 为中⼼,标准差为 stddev = sqrt(2 / fan_in) 的截断正态分布中抽取样本, 其中 fan_in 是输⼊神经元的 个数,在tf.keras中的实现⽅法为:

# 导⼊⼯具包 
import tensorflow as tf 
# 进⾏实例化 
initializer = tf.keras.initializers.he_normal() 
# 采样得到权重值 
values = initializer(shape=(9, 1)) 
# 打印结果 print(values) 
输出结果为: 
tf.Tensor( 
[[-0.1488019 ]
 [-0.12102155]
 [-0.0163257 ]
 [-0.36920077]
 [-0.89464396]
 [-0.28749225]
 [-0.5467023 ]
 [ 0.27031776]
 [-0.1831588 ]], shape=(9, 1), dtype=float32) 

        标准化的he初始化,He 均匀⽅差缩放初始化器。它从 [-limit,limit] 中的均匀分布中抽取样 本, 其中 limit 是 sqrt(6 / fan_in) , 其中 fan_in 输⼊神经 元的个数。实现为:

 # 导⼊⼯具包 
import tensorflow as tf 
# 进⾏实例化 
initializer = tf.keras.initializers.he_uniform() 
# 采样得到权重值 
values = initializer(shape=(9, 1)) 
# 打印结果 
print(values) 
输出结果为: 
tf.Tensor( 
[[ 0.80033934]
 [-0.18773115]
 [ 0.6726284 ]
 [-0.23672342]
 [-0.6323329 ]
 [ 0.6048162 ]
 [ 0.1637358 ]
 [ 0.60797024]
 [-0.46316862]], shape=(9, 1), dtype=float32)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

XMM-struggle

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值