当使用
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 均值,方差为 ”的均分布或高斯分布。
其中均匀分布可以为