2015-12-21 9 views
10

Biorąc x, y są tensory, wiem, że mogę zrobićJak zmienić nazwę zmiennej, która respektuje zakres nazwy?

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

Więc z nazwie "abc/z".

Zastanawiam się, czy istnieje funkcja f które przypisać nazwę bezpośrednio w następującym przypadku:

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

Głupi f używam teraz jest z = tf.add(0, z, name="z")

Odpowiedz

22

Jeśli chcesz „zmień” op, nie można tego zrobić bezpośrednio, ponieważ tf.Operation (lub tf.Tensor) jest niezmienny po utworzeniu. Typowym sposobem zmiany nazwy op jest zatem użycie tf.identity(), który ma prawie żadnych kosztów wykonywania:

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

Należy jednak pamiętać, że zalecany sposób zorganizować swój zakres nazwa jest przypisać nazwę samego zakresu do " wyjście”z zakresu (jeśli istnieje tylko jedno wyjście 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) 

ten sposób biblioteki TensorFlow są uporządkowane, a to wydaje się dać najlepszą wizualizację w TensorBoard.

0

Wygląda na to, że działa również bez tf.name_scope tylko z z = tf.identity(z, name="z_name"). Jeśli uruchomisz dodatkowo z = tf.identity(z, name="z_name_new"), możesz uzyskać dostęp do tego samego tensora, używając obu nazw: tf.get_default_graph().get_tensor_by_name("z_name:0") lub tf.get_default_graph().get_tensor_by_name("z_name_new:0")