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