在Theano中打印变量的表达式

时间:2015-07-05 08:37:28

标签: python debugging theano

如果我想在theano中打印一些变量进行调试,那很简单,只需写入  x2 = printing.Print('x is: ')(x),然后在以下计算中使用x2代替x。 但是,如果我想打印x的某个表达式,例如x+y,该怎么办?我该怎么办? 如果我写z = printing.Print('x+y is: ')(x+y),那么我需要稍后在计算图中插入z,建议的方法是什么?

2 个答案:

答案 0 :(得分:1)

必须可以从Theano函数的输出到达(通过计算图中的某个路径)打印操作的结果。如果要打印未使用的表达式,那么一个简单的解决方案就是将该表达式的结果包含在Theano函数的输出中。

假设您对x*y感兴趣但想要打印x+y,那么

x = theano.tensor.scalar()
y = theano.tensor.scalar()
z = printing.Print('x+y is: ')(x+y)
f1 = theano.function([x, y], [x * y]
f2 = theano.function([x, y], [z]
f3 = theano.function([x, y], [x * y, z]

f1将无法打印x+y,因为无法从函数的输出访问z; f2将打印x+y,但不会计算x*y; f3将同时做到这两点。

答案 1 :(得分:0)

这是一个令人讨厌的黑客攻击,但我已经采取了以下措施:

x = 1e-11 * Print("mean of x")(x.mean()) + x

如果你制作0 * Print(...),那么它就会被优化掉。