tf.get_variable 中變數初始化函式和Xavier初始化器
阿新 • • 發佈:2018-11-26
當使用
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)
全0tf.ones_initializer(shape,dtype)
全1
以上函式都和常量生成函式類似。
Xavier初始化器
如果深度學習的權重初始化的太小,那麼訊號將在每一層傳遞時逐漸縮小而難以產生作用,但如果初始化得太大,那訊號將在每層傳遞時逐漸放大並導致發散和失效。
Xavier初始化器就是讓權重不大不小,剛好合適。會根據某一層網路的輸入、輸出節點的數量自動調整最合適的分佈。
tf.contrib.layers.xavier_initializer( uniform=True, seed=None,
dtype=tf.float32)uniform引數: 使用uniform或者normal分佈來隨機初始化。
Xavier初始化器就是讓權重滿足” 0 均值,方差為 ”的均分佈或高斯分佈。
其中均勻分佈可以為