关于无扫描的几个问题

2024-05-29 09:56:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我对无扫描机制有点困惑,这里有一个简单的代码片段来计算^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]))

我在scan函数中设置print(“test”),因为n\u steps是5,所以递归函数应该被调用5次,我的第一个想法是“test”字符串应该被打印5次。你知道吗

但是,如下面的输出所示,“test”字符串只输出1次。你知道吗

test
[[  1   2   3]
 [  1   4   9]
 [  1   8  27]
 [  1  16  81]
 [  1  32 243]]

所以,有点困惑,既然递归函数被多次调用(n\u步),为什么“test”字符串只输出一次?你知道吗

任何帮助都将不胜感激。你知道吗

谢谢


Tags: 字符串代码testimportnumpyoutputscantheano
1条回答
网友
1楼 · 发布于 2024-05-29 09:56:33

我不会做得太深。你知道吗

theano的机制是,它为计算过程建立一个图形,并根据图形以一种我们不必关心的复杂方式进行计算。这就是为什么theano可以计算梯度,因为它模拟了之前的计算过程。你知道吗

这就是问题的关键无扫描(fn=xxx,),通过给scan你的fn,你告诉theano如何构建图形而不是在这个循环中做什么。你知道吗

Theano将根据您的fn构建图形,但它将以自己的方式计算它,而不是使用您的代码。你知道吗

所以结论是:当scan试图构建图形时,您的代码只使用了一次,然后它就被丢弃了,这就解释了为什么您的“测试”只出现一次。你知道吗

我希望这有帮助。你知道吗

这里有一个演示我创建来解释,如果你喜欢你可以尝试阅读它。我来自中国,希望我糟糕的英语不会让你感到不安。你知道吗

https://gist.github.com/NickQianFeng/9b91f2ecaa4f7e5ddb89d1b50cac1576

相关问题 更多 >

    热门问题