在 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(...)
那么它就会被优化掉。
如果我想在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(...)
那么它就会被优化掉。