2015-12-21 103 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")那么你可以使用这两个名字访问同一个张量