tf.name_scope(), tf.variable_scope(), tf.Variable(), tf.get_variable()
阿新 • • 發佈:2018-11-06
這四個函式是互相聯絡的。下面翻譯一下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中視覺化非常有用,這個 教程 還可以