2015-12-21 10 views
10

Dato x, y sono tensori, so che posso fareCome rinominare una variabile che rispetta l'ambito del nome?

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

In modo che z si chiama "abc/z".

Mi chiedo se esiste una funzione f cui assegnare il nome direttamente nel seguente caso:

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

Lo stupido f che sto usando ora è z = tf.add(0, z, name="z")

risposta

22

Se si vuole "rinomina" un op, non c'è modo di farlo direttamente, perché un tf.Operation (o tf.Tensor) è immutabile una volta che è stato creato. Il tipico modo per rinominare un op è pertanto di utilizzare tf.identity(), che ha quasi nessun costo runtime:

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

nota tuttavia che il metodo consigliato per strutturare l'ambito nome è assegnare il nome dell'ambito stessa al " uscita" dall'ambito (se v'è una sola op uscita):

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) 

Così le librerie tensorflow sono strutturate, e tende a dare la migliore visualizzazione in TensorBoard.

0

Sembra funzionare anche senza tf.name_scope solo con z = tf.identity(z, name="z_name"). Se esegui inoltre z = tf.identity(z, name="z_name_new"), puoi accedere allo stesso tensore utilizzando entrambi i nomi: tf.get_default_graph().get_tensor_by_name("z_name:0") o tf.get_default_graph().get_tensor_by_name("z_name_new:0")

Problemi correlati