theano - TensorVariable的打印值

时间:2013-07-03 10:13:42

标签: python debugging theano

如何打印theano TensorVariable的数值? 我是theano的新手,所以请耐心等待:)。

我有一个函数,我将y作为参数。 现在我想将此y的形状调试打印到控制台。 使用

print y.shape

导致控制台输出(我期待数字,即(2,4,4)):

Shape.0

或者我如何打印以下代码的数值结果(这会计算y中的值大于最大值的一半):

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

errorCount应为单个数字,因为T.sum总结了所有值。 但是使用

print errCount

给了我(期望类似134):

Sum.0

5 个答案:

答案 0 :(得分:38)

如果y是theano变量,y.shape将是theano变量。

是正常的
print y.shape

返回:

Shape.0

如果要评估表达式y.shape,可以执行以下操作:

y.shape.eval()

如果y.shape没有输入计算本身(它只依赖于共享变量和常量)。否则,如果y取决于x Theano变量,您可以传递输入值,如下所示:

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

这对sum来说是一回事。 Theano图是符号变量,在用theano.function编译或在其上调用eval()之前不进行计算。

编辑:根据docs,theano的新版本中的语法是

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

答案 1 :(得分:13)

对于未来的读者:之前的答案非常好。 但是,我找到了' tag.test_value'机制更有利于调试目的(参见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

对我来说,这更有帮助;例如,检查正确的尺寸等。

答案 2 :(得分:1)

打印张量变量的值。

执行以下操作:

<html lang="en"> <head> <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> </head> <body> <h2>click Here</h2> <div class="container"> <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Modal</button> <div class="modal fade" id="myModal" role="dialog"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">&times;</button> <h4 class="modal-title">Modal Header</h4> </div> <div class="modal-body"> <p>Some text in the modal.</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> </div> </div> </div> </div> </div> </body> </html> #这将打印Tensor中该位置的内容/值

示例,对于1 d张量:

print tensor[dimension].eval()

答案 3 :(得分:0)

使用theano.printing.Print将打印运算符添加到计算图。

示例:

import numpy
import theano

x = theano.tensor.dvector('x')

x_printed = theano.printing.Print('this is a very important value')(x)

f = theano.function([x], x * 5)
f_with_print = theano.function([x], x_printed * 5)

#this runs the graph without any printing
assert numpy.all( f([1, 2, 3]) == [5, 10, 15])

#this runs the graph with the message, and value printed
assert numpy.all( f_with_print([1, 2, 3]) == [5, 10, 15])

输出:

this is a very important value __str__ = [ 1. 2. 3.]

来源:Theano 1.0 docs: “How do I Print an Intermediate Value in a Function?”

答案 4 :(得分:0)

我发现@zuuz的答案很有帮助, 对于值,

print(your_variable.tag.test_value)

对于形状,应将其更新为

print(np.shape(your_variable.tag.test_value))