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