1. 程式人生 > >tf.name_scope(), tf.variable_scope(), tf.Variable(), tf.get_variable()

tf.name_scope(), tf.variable_scope(), tf.Variable(), tf.get_variable()

這四個函式是互相聯絡的。下面翻譯一下stackoverflow上的高票答案
what’s the difference of name scope and a variable scope in tensorflow?

翻譯:
在講name scope和variable scope之前,我們先簡單介紹一下變數共享機制,這個機制使得tensorflow使得graph的其他部分也能呼叫之前定義過的變數。

tf.get_variable()方法可以用來建立新的變數或者用來檢索之前已經定義過的變數。而tf.Variable是會一直建立新的變數,如果你命名重複,tf會自動給變數加一個字尾。

使用tf.variable_scope使得變數檢索變得更簡單。
簡單來說
tf.name_scope()是給operator以及tf.Variable建立的variable建立namespace的
tf.variable_scope()是給variable和operator建立namespace的
也就是說,tf.get_variable()建立的變數是不受name_scope影響的
舉個例子

with tf.name_scope("my_scope"):
    v1 = tf.get_variable("var1", [1], dtype=tf.float32)
    v2 = tf.Variable
(1, name="var2", dtype=tf.float32) a = tf.add(v1, v2) print(v1.name) # var1:0 ,namescope被忽略了 print(v2.name) # my_scope/var2:0 print(a.name) # my_scope/Add:0
with tf.name_scope("foo"):
    with tf.variable_scope("var_scope"):
        v = tf.get_variable("var", [1])
with tf.name_scope("bar"):
    with tf.variable
_scope("var_scope", reuse=True): v1 = tf.get_variable("var", [1]) print(v.name) # var_scope/var:0 print(v1.name) # var_scope/var:0

這使得我們可以在不同的name scope下共享變數.
這對大型網路在tensorboard中視覺化非常有用,這個 教程 還可以