(1)Xavier初始化权重:让权重满足0均值,方差为2 / (fan_in+fan_out),分布可以用均匀分布或高斯分布。
以均匀分布为例:均匀分布方差D(x)=(b-a)2 / 12。具体推导查书吧。
fan_in为输入节点,fan_out为输出节点。
a,b都是fan_in,fan_out的映射,假设a,b关于原点对称且a<0<b,b = -a
2/(fan_in+fan_out) = (b-a)2/12
且 b= -a
解得:b= sqrt(6/(fan_in+fan_out))
a= -b
此时满足Xavier条件。tf.random_uniform创建(a,b)范围内的均匀分布,方差满足2 / (fan_in+fan_out)。
1 def xavier_init(fan_in, fan_out, constant = 1): 2 low = -constant * np.sqrt(6.0 / (fan_in + fan_out)) 3 high = constant * np.sqrt(6.0 / (fan_in + fan_out)) 4 return tf.random_uniform((fan_in, fan_out), minval=low, maxval=high, dtype= tf.float32)