xavier_initializer 和 xavier_initializer_conv2d 有什么区别?
What is the difference between xavier_initializer and xavier_initializer_conv2d?
我注意到 TensorFlow 1.0 在 contrib 中包含两个 Xavier 初始化助手,
两者 link 到同一文档页面并具有相同的签名:
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 卷积层,但是如果使用常规版本是否会产生明显的影响?
其实没有区别。因为这两个函数都实现了权重初始化:
Xavier Glorot and Yoshua Bengio (2010): Understanding the difficulty of training deep feedforward neural networks. International conference on artificial intelligence and statistics.
这两个初始化器都旨在使所有层中的梯度比例大致相同。在均匀分布中,这最终是范围:x = sqrt(6. / (in + out)); [-x, x]
,对于正态分布,使用 sqrt(3. / (in + out))
的标准偏差。
我注意到 TensorFlow 1.0 在 contrib 中包含两个 Xavier 初始化助手,
两者 link 到同一文档页面并具有相同的签名:
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 卷积层,但是如果使用常规版本是否会产生明显的影响?
其实没有区别。因为这两个函数都实现了权重初始化:
Xavier Glorot and Yoshua Bengio (2010): Understanding the difficulty of training deep feedforward neural networks. International conference on artificial intelligence and statistics.
这两个初始化器都旨在使所有层中的梯度比例大致相同。在均匀分布中,这最终是范围:x = sqrt(6. / (in + out)); [-x, x]
,对于正态分布,使用 sqrt(3. / (in + out))
的标准偏差。