2016-05-17 20 views
5

Sto utilizzando TensorFlow per creare un nuovo modello, che include un ciclo dinamico. Sto usando tf.while_loop per implementare questa istanza. Un problema che ho incontrato è che:Come rilevare quale variabile è "non definita" in tensorflow

AttributeError: 'NoneType' object has no attribute 'back_prop'

Questo problema appare mentre si fa

gradients = tf.gradients(self.loss, params) 

Poi, provo a stampare tutto il params e si scopre ogni parametro ha una forma. Penso che se c'è un parametro nonetype, la sua forma dovrebbe essere None pure? D'altra parte, c'è qualche altro metodo che potrebbe aiutarmi a rilevare quale variabile non è assegnata o come []?

Qui è pieno trackback:

Traceback (most recent call last): 
    File "main.py", line 125, in <module> 
    tf.app.run() 
    File "/usr/lib/python2.7/site-packages/tensorflow/python/platform/app.py", line 30, in run 
    sys.exit(main(sys.argv)) 
    File "main.py", line 119, in main 
    train()# if FLAGS.train: 
    File "main.py", line 95, in train 
    model = create_model(sess, False) 
    File "main.py", line 75, in create_model 
    forward_only=False) 
    File "/home/sniu/lab/ai_lab/DMN-tensorflow/models/DMN.py", line 248, in __init__ 
    gradients = tf.gradients(self.loss, params) 
    File "/usr/lib/python2.7/site-packages/tensorflow/python/ops/gradients.py", line 481, in gradients 
    in_grads = _AsList(grad_fn(op, *out_grads)) 
    File "/usr/lib/python2.7/site-packages/tensorflow/python/ops/control_flow_grad.py", line 181, in _EnterGrad 
    if not grad_ctxt.back_prop: 
AttributeError: 'NoneType' object has no attribute 'back_prop' 
+0

Invia il traceback completo. –

risposta

0

NoneType significa solo che il valore è None

>>> item = None 
>>> item.value 
Traceback (most recent call last): 
    File "<stdin>", line 1 in <module> 
AttributeError: 'NoneType' object has no attribute 'value' 

Si può vedere se si chiama type su None

>>> type(None) 
<type 'NoneType'> 

None è una specie di uno speciale valore in python. È un oggetto singleton. È un'istanza di NoneType e tutti gli None sono esattamente lo stesso oggetto.

In generale, per evitare che questi tipi di errori persone o di prova se il valore è None prima, oppure avvolgere l'espressione in un try/except blocco

if item is not None: 
    print item.back_prop 

o utilizzando un try/except

try: 
    item.back_prop 
except AttributeError: 
    pass 

essere consapevole che il blocco try/except potrebbe sopprimere altri AttributeErrors non collegati a itemNone, come se item è som L'altro valore che non ha un attributo back_prop. Si consiglia di trattare questa situazione in modo diverso rispetto a se item è None.

+0

Grazie per la risposta, Brendan. Sto usando il metodo fornito da te 'type (variable)', ma dal momento che sto usando TensorFlow, questo metodo mi dà solo ''. Penso che ci sia qualcosa di sbagliato nel mio programma durante la creazione del grafico TensorFlow. Ho bisogno di sapere quale Tensore non è stato assegnato. –

+0

@HanyuGuo Sei riuscito a risolvere questo problema? Sto affrontando lo stesso problema! –

+0

@ Mr.Robot Di solito perché si rompe il grafico di calcolo rendendo alcune parti del grafico non differenziabili. Ti suggerisco di controllare cond e body se sono inclusi nel grafico di calcolo. Spero che questo sarebbe di aiuto. –

Problemi correlati