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
    评论
TensorFlow 中,可以使用不同的方法来初始化变量。以下是一些常用的变量初始化方法: 1. 随机初始化: - `tf.random_normal_initializer(mean, stddev)`: 从正态分布中随机采样初始化变量。 - `tf.truncated_normal_initializer(mean, stddev)`: 从截断的正态分布中随机采样初始化变量,截断是指只保留一定范围内的值。 - `tf.random_uniform_initializer(minval, maxval)`: 从均匀分布中随机采样初始化变量。 2. 固定值初始化: - `tf.constant_initializer(value)`: 使用给定的常数值初始化变量。 3. 预训练模型初始化: - `tf.keras.initializers.GlorotUniform()`: 根据 Glorot 初始化方法初始化变量,称为 Xavier 初始化。 - `tf.keras.initializers.HeUniform()`: 根据 He 初始化方法初始化变量。 4. 自定义初始化: - `tf.keras.initializers.VarianceScaling(scale, mode, distribution)`: 根据指定的缩放因子、模式和分布进行自定义初始化。 在使用这些方法初始化变量时,可以将其作为参数传递给 `tf.get_variable()` 或者作为初始化参数传递给 `tf.Variable()`。示例如下: ```python import tensorflow as tf # 随机初始化 random_normal_init = tf.random_normal_initializer(mean=0.0, stddev=0.1) x = tf.get_variable('x', shape=(2, 3), initializer=random_normal_init) # 固定值初始化 constant_init = tf.constant_initializer(2.0) y = tf.get_variable('y', shape=(3, 4), initializer=constant_init) # 预训练模型初始化 glorot_uniform_init = tf.keras.initializers.GlorotUniform() z = tf.get_variable('z', shape=(4, 5), initializer=glorot_uniform_init) # 自定义初始化 custom_init = tf.keras.initializers.VarianceScaling(scale=2.0, mode='fan_in', distribution='truncated_normal') w = tf.get_variable('w', shape=(5, 6), initializer=custom_init) # 初始化所有变量 init_op = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init_op) # 打印变量的值 print(sess.run(x)) print(sess.run(y)) print(sess.run(z)) print(sess.run(w)) ``` 在上述示例中,我们使用不同的初始化方法初始化了四个变量 `x`、`y`、`z` 和 `w`,然后使用 `tf.Session()` 运行初始化操作,并打印变量的值。 这些是 TensorFlow 中常用的变量初始化方法,你可以根据自己的需要选择合适的方法来初始化变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

XMM-struggle

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

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

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

打赏作者

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

抵扣说明:

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

余额充值