xavier_initializer和xavier_initializer_conv2d有什么区别?

sun*_*ide 9 neural-network deep-learning conv-neural-network tensorflow

我注意到TensorFlow 1.0在contrib中包含两个Xavier初始化助手,

两者都链接到同一文档页面并具有相同的签名:

tf.contrib.layers.xavier_initializer(uniform=True, seed=None, dtype=tf.float32)
tf.contrib.layers.xavier_initializer_conv2d(uniform=True, seed=None, dtype=tf.float32)
Run Code Online (Sandbox Code Playgroud)

但是它们之间的差异根本没有解释.我可以通过名称猜测该_conv2d版本应该用于2D卷积层,但如果使用常规版本会有明显的影响吗?

Was*_*mad 11

实际上没有区别.因为这两个函数都实现了权重初始化:

Xavier Glorot和Yoshua Bengio(2010):了解深度前馈神经网络训练的难度.人工智能和统计国际会议.

初始化器都设计成在所有层中保持渐变的比例大致相同.在均匀分布中,这最终是范围:x = sqrt(6. / (in + out)); [-x, x]并且对于正态分布,使用标准偏差sqrt(3. / (in + out)).

  • 为了扩展未来的读者:看看代码,结果是`xavier_initializer_conv2d`甚至不是一个单独的函数,只是`xavier_initializer`的别名. (4认同)
  • 确切的行在这里:https://github.com/tensorflow/tensorflow/blob/r1.3/tensorflow/contrib/layers/python/layers/initializers.py#L59 (2认同)