[英]Some questions about Theano scan
我对theano扫描机制有点困惑,这里有一个简单的代码片段来计算A ^ k
import numpy
import theano
import theano.tensor as T
def recurrence(pre_output, a):
print("test")
return pre_output*a
x = T.ivector('x')
o, updates = theano.scan(
fn = recurrence,
outputs_info = T.ones_like(x),
non_sequences = x,
n_steps = 5
)
fun = theano.function([x], o)
print(fun([1,2,3]))
我在扫描功能中设置了print(“test”),因为n_steps是5,重复功能应该被调用5次,我首先想到的是“test”字符串应该被打印5次。
但是,如下面的输出所示,“test”字符串只输出1次。
test
[[ 1 2 3]
[ 1 4 9]
[ 1 8 27]
[ 1 16 81]
[ 1 32 243]]
所以,有点困惑,因为递归函数被称为多次(n_steps)次,为什么“test”字符串只输出一次?
任何帮助将非常感激。
谢谢
我不会太深入。
theano的机制是它为计算过程建立一个图表,并根据图表以复杂的方式进行数学计算,我们不必关心。 这就是theano可以计算梯度的原因,因为它之前对计算过程进行建模。
这里有一点,在theano.scan(fn = xxx,)中,通过扫描你的fn,你告诉theano 如何构建图形而不是在这个循环中做什么 。
Theano将根据你的fn构建图形,但它将以自己的方式计算它,而不是使用你的代码。
所以这里得出结论:你的代码只在扫描试图构建图形时使用一次,然后它被丢弃,这就解释了为什么你的“测试”只出现了。
我希望这有帮助。
这是我创建的演示解释,如果你喜欢,你可以尝试阅读它。 我来自中国,希望我的英语不会让你感到不安。
https://gist.github.com/NickQianFeng/9b91f2ecaa4f7e5ddb89d1b50cac1576
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.