使用name_or_scope = None

时间:2017-12-11 05:08:23

标签: python variables tensorflow gpu

当我们使用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)。

有人解释这个吗?

1 个答案:

答案 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)。这种方式允许您在循环中创建密集层。