当前位置:   article > 正文

神经网络 03(参数初始化)_神经网络初始化参数怎么确定

神经网络初始化参数怎么确定

一、参数初始化

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

(1)随机初始化

随机初始化从均值为 0,标准差是 1 的高斯分布(也叫正态分布)中取样,使用一些很小的值对参数 W 进行初始化。

(2)标准初始化

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

(3)Xavier 初始化(在 tf.keras 中 默认 使用)

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

① 正态化的 Xavier 初始化

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

  1. # 导入工具包
  2. import tensorflow as tf
  3. # 进行实例化
  4. initializer = tf.keras.initializers.glorot_normal()
  5. # 采样得到权重值
  6. values = initializer(shape=(9, 1))
  7. # 打印结果
  8. print(values)

②标准化的 Xavier 初始化

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

  1. # 导入工具包
  2. import tensorflow as tf
  3. # 进行实例化
  4. initializer = tf.keras.initializers.glorot_uniform()
  5. # 采样得到权重值
  6. values = initializer(shape=(9, 1))
  7. # 打印结果
  8. print(values)

(4)He 初始化

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

① 正态化的 He 初始化

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

  1. # 导入工具包
  2. import tensorflow as tf
  3. # 进行实例化
  4. initializer = tf.keras.initializers.he_normal()
  5. # 采样得到权重值
  6. values = initializer(shape=(9, 1))
  7. # 打印结果
  8. print(values)

② 标准化的 He 初始化

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

  1. # 导入工具包
  2. import tensorflow as tf
  3. # 进行实例化
  4. initializer = tf.keras.initializers.he_uniform()
  5. # 采样得到权重值
  6. values = initializer(shape=(9, 1))
  7. # 打印结果
  8. print(values)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/523219
推荐阅读
相关标签
  

闽ICP备14008679号