41

如何打印 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
4

5 回答 5

41

如果 y 是 theano 变量,则 y.shape 将是一个 theano 变量。所以这是正常的

print y.shape

返回:

Shape.0

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

y.shape.eval()

如果y.shape不输入计算本身(它只依赖于共享变量和常量)。否则,如果y依赖于xTheano 变量,您可以像这样传递输入值:

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

这对于sum. theano.functionTheano 图是符号变量,在您编译或调用它们之前不会进行计算eval()

编辑:根据文档,theano 较新版本的语法是

y.shape.eval({x: numpy.random.rand(...)})
于 2013-07-03T16:40:18.020 回答
15

对于未来的读者:以前的答案很好。但是,我发现 '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

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

于 2015-04-30T08:54:07.183 回答
2

打印张量变量的值。

请执行下列操作:

print tensor[dimension].eval()# 这将打印张量中该位置的内容/值

例如,对于 1 d 张量:

print tensor[0].eval()
于 2016-07-23T04:12:09.713 回答
0
于 2018-07-05T13:32:34.520 回答
0

我发现@zuuz 的回答对价值观很有帮助,

print(your_variable.tag.test_value)

对于形状,它应该更新为,

print(np.shape(your_variable.tag.test_value))
于 2020-01-12T23:17:48.723 回答