2016-05-17 39 views
5

'da hangi değişkenin "nonetype" olduğu nasıl algılanır? Dinamik bir döngü içeren yeni bir model oluşturmak için TensorFlow kullanıyorum. Bu örneği uygulamak için tf.while_loop kullanıyorum.Tensorflow

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

Sonra ben tüm params yazdırmaya çalışın yaparken

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

Bu sorun görünür ve her parametre bir şekle sahiptir çıkıyor: Ben karşılaşmak Bir konu olmasıdır. Bence nonetype parametresi varsa, şekli None olmalıdır? Öte yandan, hangi değişkenin atanmadığını veya [] gibi tespit edilmesine yardımcı olabilecek başka bir yöntem var mı?

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

Tam geri izlemeyi gönderin. –

cevap

0

NoneType sadece değer None

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

Eğer None

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

None üzerinde type çağrı olmadığını görebilirsiniz edilir tür anlamına gelir: Burada

tam geri izleme olduğunu özel bir python'da değer. singleton nesnesi. Bu, bir NoneType örneğidir ve tüm None'lar aynı nesnedir.

Genellikle değeri, ilk None ise hatalar insanlar ya testin bu tür önlemek, ya da bir try/except blokta

if item is not None: 
    print item.back_prop 

yılında ifadesini sarın Ya da try/except

try: 
    item.back_prop 
except AttributeError: 
    pass 

Be kullanarak try/except bloğunun, item, item öğesinin olduğu gibi item ilişkisiz diğer AttributeErrors'u engelleyebileceğini unutmayın da'un diğer değeri back_prop özniteliğine sahip değil. Bu durumu itemNone ise farklı şekilde değerlendirmek isteyebilirsiniz.

+0

Yanıtladığınız için teşekkürler, Brendan. Tür (değişken) 'tarafından sağlanan yöntemi kullanıyorum, ancak TensorFlow'u kullandığımdan, bu yöntem sadece bana ' verir. Bence, TensorFlow grafiğini oluştururken programımda bir sorun var. Hangi Tensörün atanmadığını bilmem gerek. –

+0

@HanyuGuo Bu sorunu çözebildiniz mi? Aynı konuyla yüzleşiyorum! –

+0

@ Mr.Robot Genellikle, hesaplama grafiğini kırdığınızdan, grafiğin bazı kısımlarını ayırt edilemez hale getirdiğinizden. Hesaplama grafiğine dahil olup olmadığına bakılmaksızın kondisyonu ve bedeni kontrol etmenizi öneririm. Umarım bu yardımcı olur. –