2015-12-21 104 views
10

鑑於x, y是張量,我知道我可以做如何重命名一個尊重名稱範圍的變量?

with tf.name_scope("abc"): 
    z = tf.add(x, y, name="z") 

這樣z被命名爲"abc/z"

我想知道是否存在功能f直接在以下情況下指定名稱:

with tf.name_scope("abc"): 
    z = x + y 
    f(z, name="z") 

愚蠢f我現在使用的是z = tf.add(0, z, name="z")

回答

22

如果你想「重命名」一個op,沒有辦法直接這樣做,因爲tf.Operation(或tf.Tensor)一旦創建就是不可變的。因此,重命名運算的典型方法是使用tf.identity(),它幾乎沒有運行成本:但是

with tf.name_scope("abc"): 
    z = x + y 
    z = tf.identity(z, name="z") 

注意,推薦的方法來組織你的名字範圍是範圍本身的名稱分配給「輸出」從範圍(如果有一個單輸出運算):

with tf.name_scope("abc") as scope: 
    # z will get the name "abc". x and y will have names in "abc/..." if they 
    # are converted to tensors. 
    z = tf.add(x, y, name=scope) 

這是TensorFlow庫如何結構化,並且它往往給在TensorBoard最好可視化。

0

看來它的工作原理也沒有tf.name_scope只有z = tf.identity(z, name="z_name")tf.get_default_graph().get_tensor_by_name("z_name:0")tf.get_default_graph().get_tensor_by_name("z_name_new:0")

:如果您運行的另外 z = tf.identity(z, name="z_name_new")那麼你可以使用這兩個名字訪問同一個張量