2024-09-21 03:17:38 发布
网友
我正在将我的Caffe网络移植到TensorFlow,但它似乎没有xavier初始化。我正在使用truncated_normal,但这似乎使训练变得更加困难。
truncated_normal
因为版本0.8有一个Xavier初始值设定项,see here for the docs。
你可以用这样的东西:
W = tf.get_variable("W", shape=[784, 256], initializer=tf.contrib.layers.xavier_initializer())
@Aleph7,Xavier/Glorot初始化依赖于神经元的传入连接数(fan_-in)、传出连接数(fan_-out)和激活函数类型(sigmoid或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为一些不同的东西写了一个post yesterday,而TensorFlow恰好也使用Xavier初始化。如果您感兴趣,还有一个python笔记本,它有一个端到端的示例:https://github.com/delip/blog-stuff/blob/master/tensorflow_ufp.ipynb
添加另一个关于如何定义使用Xavier and Yoshua方法初始化的tf.Variable的示例:
tf.Variable
graph = tf.Graph() with graph.as_default(): ... initializer = tf.contrib.layers.xavier_initializer() w1 = tf.Variable(initializer(w1_shape)) b1 = tf.Variable(initializer(b1_shape)) ...
这就阻止了我在loss函数中使用nan值,因为在使用RELUs的多层时,数值不稳定。
nan
因为版本0.8有一个Xavier初始值设定项,see here for the docs。
你可以用这样的东西:
@Aleph7,Xavier/Glorot初始化依赖于神经元的传入连接数(fan_-in)、传出连接数(fan_-out)和激活函数类型(sigmoid或tanh)。看这个:http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf
现在,就你的问题。这就是我在TensorFlow中的方法:
注意,我们应该从均匀分布中抽样,而不是从另一个答案中建议的正态分布中抽样。
顺便说一下,我使用TensorFlow为一些不同的东西写了一个post yesterday,而TensorFlow恰好也使用Xavier初始化。如果您感兴趣,还有一个python笔记本,它有一个端到端的示例:https://github.com/delip/blog-stuff/blob/master/tensorflow_ufp.ipynb
添加另一个关于如何定义使用Xavier and Yoshua方法初始化的
tf.Variable
的示例:这就阻止了我在loss函数中使用
nan
值,因为在使用RELUs的多层时,数值不稳定。相关问题 更多 >
编程相关推荐