Как переименовать переменную, которая учитывает область имени?

Учитывая 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")

Ответ 1

Если вы хотите "переименовать" op, нет прямого способа сделать это, потому что tf.Operation (или tf.Tensor) неизменен после его создания. Таким образом, типичный способ переименования op состоит в использовании tf.identity(), который почти не имеет затрат времени исполнения:

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

Обратите внимание, однако, что рекомендуемый способ структурирования области имен - назначить имя самой области для "вывода" из области действия (если есть один выход op):

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.

Ответ 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")