2015-12-21 3 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"). Если вы запустите дополнительно 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")

Смежные вопросы