tf.get_variable 中变量初始化函数和Xavier初始化器

当使用
tf.get_variable(name, shape=None, initializer=None)

来定义变量时,可以利用变量初始化函数来实现对 initializer 的赋值。

在神经网络中,最常权重赋值方式正态随机赋值Xavier赋值

1. 变量初始化函数

  • tf.random_normal_initializer(shape,mean=0.0,stddev=1.0,dtype=tf.float32,,name=None))
    正态

  • tf.random_uniform_initializer(shape,minval=0,maxval=None,dtype=tf.float32)均匀

    • tf.constant_initializer(obj,shape) 常量
  • tf.zeros_initializer(shape,dtype) 全0

  • tf.ones_initializer(shape,dtype) 全1

以上函数都和常量生成函数类似。

Xavier初始化器

如果深度学习的权重初始化的太小,那么信号将在每一层传递时逐渐缩小而难以产生作用,但如果初始化得太大,那信号将在每层传递时逐渐放大并导致发散和失效。

Xavier初始化器就是让权重不大不小,刚好合适。会根据某一层网络的输入、输出节点的数量自动调整最合适的分布。

  • tf.contrib.layers.xavier_initializer( uniform=True, seed=None,
    dtype=tf.float32)

  • uniform参数: 使用uniform或者normal分布来随机初始化。

Xavier初始化器就是让权重满足” 0 均值,方差为 2 n i n + n o u t ”的均分布或高斯分布

其中均匀分布可以为

( 6 n i n + n o u t , 6 n i n + n o u t )

猜你喜欢

转载自blog.csdn.net/promisejia/article/details/81635830
今日推荐