xavier_initializer(uniform=True, seed=None, dtype=tf.float32)
和glorot_uniform_initializer(seed=None, dtype=tf.float32)
指的是同一个人Xavier Glorot。为什么不将它们合并为一个函数?
xavier_initializer
位于tf.contrib.layers
。 glorot_uniform_initializer
中的tf
。 contrib
的命名空间最终是否会消失,contrib
中的内容会移动到tf
的命名空间吗?
答案 0 :(得分:2)
是的,tf.contrib.layers.xavier_initializer
和tf.glorot_uniform_initializer
都实现了此JMLR paper中描述的相同概念,可以看到代码:
对于fan_in
,fan_out
,mode = FAN_AVG
和uniform = True
的典型值,两个实现都会从标准统一分布中采样值限制 [ -sqrt(3), sqrt(3)
)
因为tf.initializer
支持各种各样的初始化策略,所以它很可能会保留,而来自contrib的初始化xavier_initialization
很可能在将来的版本中被弃用。
所以,是的,很有可能在未来的版本中,tf.contrib.layers.xavier_initialier
初始化方式可能会消失。
答案 1 :(得分:2)
有趣的问题!我将以tf.contrib
:
contrib
的命名空间会消失吗?只有当没有更多不稳定的社区贡献添加到TensorFlow时 - 所以永远不会。 This question可能会引起关注。我总结一下。
contrib
命名空间用于社区支持的用户提供的代码(不是TensorFlow)。 contrib
中的代码足以在API中使用,并且最终可能会合并。但是,在TensorFlow团队对其进行全面测试之前,它会保留在contrib
。我确信用于解释contrib
存在的原因的文档,但我无法再找到它了。最接近的是the API stability promise,这解释了 contrib
函数/类可能会发生变化!
更深入一点,contrib
中的内容最终会合并到tf
中。例如,Keras
的整体在1.4中从contrib
合并到tf.keras
。但是,合并的确切过程各不相同。例如,比较tf.contrib.rnn
中的tf.nn
和RNN功能。相当多的tf.nn
别名tf.contrib.rnn
。我的意思是,点击tf.nn.rnn_cell
guide上的任何。您正在查看tf.rnn.contrib
doc!试试吧!似乎使用tf.contrib.rnn
是非常稳定的,尽管它已经迁移到" native" tf
。另一方面,Datasets
合并并非如此干净(contrib
在1.3中合并,在1.4中合并)。因为在合并期间更改了一些 - 很少 - 代码,使用tf.contrib.data.TFRecordDataset
将为您提供一个很好的折旧警告。并且,有些事情已经在contrib
中持续了很长一段时间并且没有显示出很快就会出现合并的迹象:tf.contrib.training.stratified_sample
浮现在脑海中。我相信contrib.keras
在合并前已经存在了一段时间。
现在进入Xavier / Glorot:
此处指向contrib.xavier...
和tf.glorot...
的来源的链接。源代码看起来(几乎)相同,但让我们跟随variance_scaling_initializer
。现在情况有所不同:xavier
有a function而glorot
使用a class(VarianceScaling
别名为variance_scaling_initializer
)。类似的是,是的,但一眼就看出了本土的#34; tf
版本为我们提供了一些不同的错误消息和一些更好的输入验证。
那么为什么不删除contrib.xavier
?我不知道。如果我不得不推测,那是因为contrib.xavier
起飞了。我的意思是,我仍然使用它,我仍然一直看到它(需要引用?)。现在我知道glorot
基本相同,我不确定我是否 使用contrib.xavier
。但我离题了。我怀疑xavier
一直存在,因为删除它会破坏合理数量的代码。当然,contrib
没有稳定承诺,但为什么要修复(或打破)未被破坏的东西?
在Github上发布问题或拉取请求可能会从实际贡献者那里产生一些更有趣的回复。我怀疑你会得到它没有的原因并且不会被删除,但也许不会。我快速搜索" xavier"然后" glorot"在问题中表明它以前没有被问过。
编辑:要明确,正如kmario指出的那样,它们在数学上是相同的。我指出,现在的实现在输入验证和结构方面略有不同。他似乎认为xavier比我最初想象的更容易贬值。我很乐意顺从他,因为他可能比我更有经验。