1. 程式人生 > >tf.get_variable 中變數初始化函式和Xavier初始化器

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 )