当我们使用variable_scope时,我们通常将第一个参数(name_or_scope
)设置为variable_scope的名称。当我们将重用变量设置为' True'时,我们可以在variable_scope中共享变量。
但是,我发现在tensorflow API中(例如Bahdanau注意,或tf.layers.Dense
),有变量范围,其第一个参数(name_or_scope
)设置为None
,第二个参数( default_name
)被设置为我们认为的范围名称。
我检查了tf.variable_scope
的代码,发现:
如果
name_or_scope
不是None,则按原样使用。如果scope
为无, 然后使用default_name
。在这种情况下,如果名称相同 以前在同一范围内使用,它将是独一无二的 将_N
添加到其中。
在这种情况下,我无法在for循环中使用它,因为每次调用variable_scope时,它都会创建具有不同名称的新variable_scope
。
我无法在任何地方找到解释此功能的内容(我的意思是name_or_scope
设置为None
)。
有人解释这个吗?
答案 0 :(得分:1)
你是对的,当使用tf.variable_scope
调用name_or_scope=None
时,会使用default_name
参数并且它是不受限制的。因此,在循环中调用它将创建不同的范围。
不确定 Bahdanau注意,但可以通过tf.layers.Dense
参数使用自定义范围创建_scope
:
layer = Dense(units, ..., _scope=name)
事实上,您可以使用指定的name
来呼叫tf.layers.dense
,此名称将定义tf.variable_scope(name)
。这种方式允许您在循环中创建密集层。