在 Theano 中打印变量的表达式

Printing expressions of variables in Theano

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

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 两者都会做。

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

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

如果你做到了 0 * Print(...) 那么它就会被优化掉。