如何重命名一个尊重名称范围的变量?

时间:2015-12-21 15:54:38

标签: tensorflow

鉴于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")

我现在使用的愚蠢fz = tf.add(0, z, name="z")

2 个答案:

答案 0 :(得分:28)

如果要“重命名”op,则无法直接执行此操作,因为tf.Operation(或tf.Tensor)一旦创建就不可变。因此,重命名op的典型方法是使用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中提供最佳的可视化。

答案 1 :(得分:2)

似乎只有tf.name_scope才能使用z = tf.identity(z, name="z_name")。如果您额外运行z = tf.identity(z, name="z_name_new"),则可以使用以下两个名称访问相同的张量:tf.get_default_graph().get_tensor_by_name("z_name:0")tf.get_default_graph().get_tensor_by_name("z_name_new:0")