theano - print value of TensorVariable

匿名 (未验证) 提交于 2019-12-03 02:16:02

问题:

How can I print the numerical value of a theano TensorVariable? I'm new to theano, so please be patient :)

I have a function where I get y as a parameter. Now I want to debug-print the shape of this y to the console. Using

print y.shape 

results in the console output (i was expecting numbers, i.e. (2,4,4)):

Shape.0 

Or how can I print the numerical result of for example the following code (this counts how many values in y are bigger than half the maximum):

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

errorCount should be a single number because T.sum sums up all the values. But using

print errCount 

gives me (expected something like 134):

Sum.0 

回答1:

If y is a theano variable, y.shape will be a theano variable. so it is normal that

print y.shape 

return:

Shape.0 

If you want to evaluate the expression y.shape, you can do:

y.shape.eval() 

if y.shape do not input to compute itself(it depend only on shared variable and constant). Otherwise, if y depend on the x Theano variable you can pass the inputs value like this:

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

this is the same thing for the sum. Theano graph are symbolic variable that do not do computation until you compile it with theano.function or call eval() on them.

EDIT: Per the docs, the syntax in newer versions of theano is

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


回答2:

For future readers: the previous answer is quite good. But, I found the 'tag.test_value' mechanism more beneficial for debugging purposes (see 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 

For me, this is much more helpful; e.g., checking correct dimensions etc.



回答3:

print Value of a Tensor Variable.

Do the following:

print tensor[dimension].eval() # this will print the content/value at that position in the Tensor

Example, for a 1 d tensor:

print tensor[0].eval() 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!