2016-05-17 24 views
5

Tôi đang sử dụng TensorFlow để tạo mô hình mới, bao gồm vòng lặp động. Tôi đang sử dụng tf.while_loop để thực hiện trường hợp này. Một vấn đề tôi gặp phải là:Cách phát hiện biến nào là 'nonetype' trong tensorflow

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

Vấn đề này xuất hiện trong khi làm

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

Sau đó, tôi cố gắng để in tất cả các params và nó quay ra mỗi tham số có hình dạng. Tôi nghĩ rằng nếu có thông số nonetype, hình dạng của nó cũng phải là None? Mặt khác, có phương pháp nào khác có thể giúp tôi phát hiện biến nào không được chỉ định hoặc như [] không?

Dưới đây là toàn 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

Đăng truy cập đầy đủ. –

Trả lời

0

NoneType chỉ có nghĩa rằng giá trị là None

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

Bạn có thể thấy nếu bạn gọi type trên None

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

None được loại của một đặc biệt giá trị trong python. Đó là một đối tượng singleton. Đó là một thể hiện của NoneType và tất cả các đối tượng giống hệt nhau của None.

Nói chung, để ngăn chặn các loại lỗi người ta hoặc là kiểm tra nếu giá trị là None đầu tiên hoặc họ quấn biểu trong một khối try/except

if item is not None: 
    print item.back_prop 

Hoặc sử dụng một try/except

try: 
    item.back_prop 
except AttributeError: 
    pass 

Be lưu ý rằng khối try/except có thể chặn khác AttributeErrors không liên quan đến itemNone, như nếu item là som e giá trị khác mà cũng không có thuộc tính back_prop. Bạn có thể muốn xử lý tình huống đó khác với nếu itemNone.

+0

Cảm ơn bạn đã trả lời, Brendan. Tôi đang sử dụng phương thức được cung cấp bởi bạn 'type (variable)', nhưng vì tôi đang sử dụng TensorFlow, phương thức này chỉ cho tôi ''. Tôi nghĩ rằng, có một cái gì đó sai trái với chương trình của tôi trong khi tạo ra các đồ thị TensorFlow. Tôi cần biết Tensor nào không được chỉ định. –

+0

@HanyuGuo Bạn có thể giải quyết vấn đề này không? Tôi đang đối mặt với cùng một vấn đề! –

+0

@ Mr.Robot Nó thường là vì bạn phá vỡ các đồ thị tính toán làm cho một số phần của đồ thị không thể phân biệt. Tôi sẽ đề nghị bạn kiểm tra các cond và cơ thể cho dù chúng có được bao gồm trong đồ thị tính toán hay không. Hy vọng điều này sẽ giúp. –

Các vấn đề liên quan