theano.function - 它是如何工作的?

theano.function - how does it work?

我已经阅读了官方文档并阅读了这里的评论https://github.com/Theano/theano/blob/ddfd7d239a1e656cee850cdbc548da63f349c37d/theano/compile/function.py#L74-L324,一个人告诉我它告诉 Theano 将符号计算图编译成一个实际的程序,你可以 运行 .

但是,我还是搞不懂它是怎么知道的,比如这段代码:

self.update_fun = theano.function(
        inputs=[self.input_mat, self.output_mat],
        outputs=self.cost,
        updates=updates,
        allow_input_downcast=True)

如果没有主体,如何计算所有这些?我的意思是所有这些东西都是在这些粘贴行上方的一些代码中计算的,但是...... theano.function 实际上是在寻找源代码来找出如何计算这些东西吗?我只是在猜测,真的很想知道它是如何工作的。

也许我在解释“它告诉 Theano 将符号计算图编译成实际程序”时遇到的问题是我不知道什么是符号计算图,所以这将是另一个与前一个非常相关的问题。

解释将不胜感激。

我不是专家,但这是我的解释:

是的,'body' 是在上面的代码中定义的。但是 theano 并不像 python 解释器那样直接 'interpret' 该代码。有问题的代码只是创建 theano 允许 theano 编译所需函数的对象。让我们举一个简单的例子:如何创建函数 f(x) = 2x + x**3.

您首先创建一个符号输入变量x。然后通过构建 f(x):

的符号表达式来定义函数的 'body'
y = 2 * x + x**3 # defines a new symbolic variable which depends on x

这个y对象相当于一个表示公式的图表。类似于 Plus(Times(2,x), Power(x,3))。 您最终用 input=xoutput=y 调用了 theano.function。然后 theano 施展魔法,根据 y.

中的信息(图表)'contained' 编译实际函数 f(x) = y = 2 * x + x**3

它让事情变得更清楚了吗?