2013-07-03 56 views
34

Làm thế nào tôi có thể in giá trị bằng số của một sản phẩm TensorVariable? Tôi là người mới đến theano, vì vậy hãy kiên nhẫn :)theano - giá trị in của TensorVariable

Tôi có một chức năng mà tôi nhận được thông số y. Bây giờ tôi muốn gỡ lỗi-in hình dạng này y để bàn điều khiển. Sử dụng

print y.shape 

kết quả trong giao diện điều khiển đầu ra (tôi đã mong đợi con số, tức là (2,4,4)):

Shape.0 

Hoặc làm thế nào tôi có thể in kết quả bằng số của ví dụ đoạn mã sau (điều này đếm có bao nhiêu giá trị trong y có kích thước lớn hơn một nửa mức tối đa):

errorCount = T.sum(T.gt(T.abs_(y),T.max(y)/2.0)) 

errorCount phải là một số duy nhất vì T.sum tổng hợp tất cả các giá trị. Nhưng sử dụng

print errCount 

mang lại cho tôi (dự kiến ​​một cái gì đó giống như 134):

Sum.0 
+0

từ các tài liệu - [ “Làm thế nào để in một giá trị trung gian trong một hàm/phương pháp?”] (Http://deeplearning.net/software/theano/tutorial/debug_faq.html#how-do-i-print-an-intermediate-value-in -a-function-method) –

Trả lời

37

Nếu y là một biến theano, y.shape sẽ là một biến theano. vì thế nó là bình thường mà

print y.shape 

trở lại:

Shape.0 

Nếu bạn muốn đánh giá y.shape biểu hiện, bạn có thể làm:

y.shape.eval() 

nếu y.shape không đầu vào để tính toán chính nó (nó chỉ phụ thuộc vào biến chia sẻ và hằng số). Ngược lại, nếu y phụ thuộc vào biến x Theano bạn có thể vượt qua các giá trị đầu vào như thế này:

y.shape.eval(x=numpy.random.rand(...)) 

đây là điều tương tự cho các sum. Biểu đồ Theano là biến tượng trưng không tính toán cho đến khi bạn biên dịch nó với theano.function hoặc gọi eval() trên chúng.

EDIT: mỗi sự docs, cú pháp trong các phiên bản mới hơn của theano là

y.shape.eval({x: numpy.random.rand(...)}) 
13

Đối với độc giả trong tương lai: các câu trả lời trước là khá tốt. Nhưng, tôi thấy cơ chế 'tag.test_value' có lợi hơn cho mục đích gỡ lỗi (xem theano-debug-faq):

from theano import config 
from theano import tensor as T 
config.compute_test_value = 'raise' 
import numpy as np  
#define a variable, and use the 'tag.test_value' option: 
x = T.matrix('x') 
x.tag.test_value = np.random.randint(100,size=(5,5)) 

#define how y is dependent on x: 
y = x*x 

#define how some other value (here 'errorCount') depends on y: 
errorCount = T.sum(y) 

#print the tag.test_value result for debug purposes! 
errorCount.tag.test_value 

Đối với tôi, đây là nhiều hơn nữa hữu ích; ví dụ: kiểm tra kích thước chính xác, v.v.

1

in Giá trị của biến Tensor.

Làm như sau:

print tensor[dimension].eval() # này sẽ in nội dung/giá trị tại vị trí đó trong tensor

Ví dụ, đối với một 1 d tensor:

print tensor[0].eval() 
+0

câu trả lời một phần, đúng không? – manetsus

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