擅长:python、mysql、java
<p>@Aleph7,Xavier/Glorot初始化依赖于神经元的传入连接数(fan_-in)、传出连接数(fan_-out)和激活函数类型(sigmoid或tanh)。看这个:<a href="http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf">http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf</a></p>
<p>现在,就你的问题。这就是我在TensorFlow中的方法:</p>
<pre><code>(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))
</code></pre>
<p>注意,我们应该从均匀分布中抽样,而不是从另一个答案中建议的正态分布中抽样。</p>
<p>顺便说一下,我使用TensorFlow为一些不同的东西写了一个<a href="http://deliprao.com/archives/100">post yesterday</a>,而TensorFlow恰好也使用Xavier初始化。如果您感兴趣,还有一个python笔记本,它有一个端到端的示例:<a href="https://github.com/delip/blog-stuff/blob/master/tensorflow_ufp.ipynb">https://github.com/delip/blog-stuff/blob/master/tensorflow_ufp.ipynb</a></p>