@ Aleph7,Xavier / Glorot初始化取决于传入连接的数量(fan_in),传出连接的数量(fan_out)以及神经元的激活函数类型(S型或tanh)。看到这个: http : //jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf
所以,现在,你的问题。这就是我在TensorFlow中要做的事情:
(fan_in, fan_out) = ...
low = -4*np.sqrt(6.0/(fan_in + fan_out)) # use 4 for sigmoid, 1 for tanh activation
high = 4*np.sqrt(6.0/(fan_in + fan_out))
return tf.Variable(tf.random_uniform(shape, minval=low, maxval=high, dtype=tf.float32))
请注意,我们应该从均匀分布中取样,而不是从其他答案中建议的正态分布中取样。
顺便说一句,我昨天在TensorFlow上写了一篇不同的文章 ,碰巧也使用Xavier初始化。如果您有兴趣,还有一个带有端到端示例的python笔记本: https : //github.com/delip/blog-stuff/blob/master/tensorflow_ufp.ipynb
0
我正在将我的Caffe网络移植到TensorFlow上,但是它似乎没有进行大量初始化。我正在使用
truncated_normal
但这似乎使训练变得困难得多。