我注意到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)
然而,它们之间的差异根本没有解释。我可以通过名称猜测_conv2d
版本应该用于2D卷积层,但是如果要使用常规版本会产生明显的影响吗?
答案 0 :(得分:8)
实际上没有区别。因为这两个函数都实现了权重初始化:
Xavier Glorot和Yoshua Bengio(2010):Understanding the difficulty of training deep feedforward neural networks.人工智能与统计国际会议。
初始化器的设计都是为了保持所有层中渐变的比例大致相同。在均匀分布中,这最终为范围:x = sqrt(6. / (in + out)); [-x, x]
,对于正态分布,使用标准偏差sqrt(3. / (in + out))
。