Tensorflow 为什么要使用tf.name\u scope()

Tensorflow 为什么要使用tf.name\u scope(),tensorflow,Tensorflow,我一直在读他们写的TensorFlow教程 with tf.name_scope('read_inputs') as scope: # something 榜样 a = tf.constant(5) 及 似乎也有同样的效果。那么,为什么我们要使用name\u scope?它们不是一回事 import tensorflow as tf c1 = tf.constant(42) with tf.name_scope('s1'): c2 = tf.constant(42) prin

我一直在读他们写的TensorFlow教程

with tf.name_scope('read_inputs') as scope:
    # something
榜样

a = tf.constant(5)


似乎也有同样的效果。那么,为什么我们要使用
name\u scope

它们不是一回事

import tensorflow as tf
c1 = tf.constant(42)
with tf.name_scope('s1'):
    c2 = tf.constant(42)
print(c1.name)
print(c2.name)
印刷品

Const:0
s1/Const:0

顾名思义,scope函数为您在其中创建的操作的名称创建一个作用域。这对如何引用张量、重用、在TensorBoard中如何显示图形等都有影响。

我看不到重用常量的用例,但这里有一些关于范围和变量共享的相关信息

范围

  • name\u scope
    将把scope作为前缀添加到所有操作中

  • variable\u scope
    将把scope作为前缀添加到所有变量和操作中

实例化变量

  • tf.Variable()

  • tf.get\u variable()
    构造函数忽略
    name\u范围
    ,只在name前面加上当前
    variable\u范围

例如:

带有tf.variable\u scope(“variable\u scope”):
使用tf.name\u scope(“name\u scope”):
var1=tf.get_变量(“var1”,[1])
使用tf.variable_scope(“variable_scope”):
使用tf.name\u scope(“name\u scope”):
var2=tf.Variable([1],name=“var2”)
产生

var1=
var2=
重用变量

  • 始终使用
    tf.variable\u scope
    定义共享变量的范围

  • 执行重用变量的最简单方法是使用
    reuse\u variables()
    ,如下所示

带有tf.variable_scope(“scope”):
var1=tf.get_变量(“variable1”[1])
tf.get_variable_scope().重用_variables()
var2=tf.get_变量(“variable1”[1])
断言var1==var2
  • tf.Variable()
    总是创建一个新变量,当一个变量用一个已经使用过的名称构造时,它只是在它后面附加
    \u 1
    \u 2
    等-这可能会导致冲突:(

    • 我将尝试使用一些松散但易于理解的语言来解释

      名称范围

      通常用于将一些变量组合在一个op中。也就是说,它给出了关于此op中包含多少变量的解释。但是,对于这些变量,不考虑它们的存在。您只知道,好的,要完成此op,我需要准备这个、这个和这个变量。实际上,在使用
      tensorboard
      时,它会有所帮助你可以把变量绑定在一起,这样你的图就不会乱七八糟了

      可变范围

      将其视为一个抽屉。与名称空间相比,这更具有“物理”意义,因为这样的抽屉确实存在;相反,名称空间只是帮助理解包含哪些变量


      变量空间以来“物理”存在,所以它限制了,因为这个变量已经存在,你不能重新定义它,如果你想多次使用它们,你需要指出
      重用

      谢谢你的回答。你能告诉我如何重用c1和c2吗?@VibhorKanojia将它们定义为tf.变量吗?问得好!
      Const:0
      s1/Const:0