为什么同名的tf.name_scope不同?

gau*_*clb 8 tensorflow

看一下代码片段:

import tensorflow as tf

with tf.name_scope('y'):
    a1 = tf.Variable(1,name='a')

with tf.name_scope('y'):
    a2 = tf.Variable(1,name='b')

print(a1.name)
print(a2.name)
Run Code Online (Sandbox Code Playgroud)

输出是

y/a:0
y_1/b:0
Run Code Online (Sandbox Code Playgroud)

为什么变量a2的name_scope是y_1?

amo*_*ej1 5

github上有一个关于这个主题的有趣讨论.

您可以做什么在末尾添加'/',使其成为绝对标识符:

import tensorflow as tf

with tf.name_scope('y'):
    a1 = tf.Variable(1,name='a')

with tf.name_scope('y/'):
    a2 = tf.Variable(1,name='b')

print(a1.name)
print(a2.name)
Run Code Online (Sandbox Code Playgroud)

产量:

y/a:0
y/b:0
Run Code Online (Sandbox Code Playgroud)

这同样适用于tf.variable_scope().

你的问题的底线很可能是Tensorflow无法知道你是否明确地想要在范围内附加某些内容,或者是否有人创建了不同的范围并希望保护您免受无意的重复使用.通过在末尾附加'/',您可以将名称转换为绝对标识符.

  • 有几件事:1) `tf.variable_scope` 的工作方式与 `tf.name_scope` 类似,但在末尾用 `/` 调用它_不会_有那种效果 2) 因为将 `/` 与 `tf.name_scope` 一起使用使作用域绝对化,父作用域_不_继承;您可以使用 [`get_name_scope`](https://www.tensorflow.org/api_docs/python/tf/Graph#get_name_scope) 来制作一个完整的绝对范围([参见此处](https://github.com/tensorflow /tensorflow/issues/6007#issuecomment-315030061)) 3)你可以重用`name_scope`([见这里](https://github.com/tensorflow/tensorflow/issues/6007#issuecomment-264837281))。 (2认同)