我在我的网络中使用LSTMCell单位,我无法弄清楚如何初始化此单位的权重。
我已经尝试过从方法到方法的代码,但我并不是100%确定这些代码是如何工作的。
在LSTMCell源代码中,以下行似乎初始化权重。来自contrib/rnn/python/ops/core_rnn_cell_impl.py:
[...]
scope = vs.get_variable_scope()
with vs.variable_scope(scope, initializer=self._initializer) as unit_scope:
[...]
方法variable_scope
以及如何定义范围也让我感到困惑,我不确定这个逻辑是如何工作的。
从python/ops/variable_scope.py开始,方法variable_scope
似乎调用了方法_pure_variable_scope
,后者似乎又返回了VariableScope
的实例,最终似乎调用了{{3} }}。 get_variable
的{{3}}内容如下:
如果初始化程序为
None
(默认值),则传递默认初始化程序 将使用变量范围。如果那个也是None
,那么 将使用glorot_uniform_initializer
。初始化程序也可以 一个Tensor,在这种情况下变量被初始化为这个值和 形状
是否正确,除非未指定初始值设定项,否则将使用glorot_uniform_initializer
初始化LSTMCell?
答案 0 :(得分:1)
根据您对代码的跟踪,我认为您是正确的:LSTMCell将使用glorot_uniform_initializer
进行初始化,也称为Xavier uniform initializer
,其实现位于:{{3} }