试图理解变量......我可以打印它们吗?

Trying to understand variables... can I print them?

如果我们使用其中一个教程示例:

>>> a, b = T.dmatrices('a', 'b')
>>> diff = a - b
>>> f = function([a, b], [diff])
>>>> f([[1, 1], [1, 1]], [[0, 1], [2, 3]])
[array([[ 1.,  0.],
        [-1., -2.]]),

diff 现在是否包含数组 [[ 1., 0.],[-1., -2.]]

如何在我打电话后打印出 difff()

我无法理解这种函数式的用法。谁能解释一下?

在控制台中,只需输入变量名称

>>> diff

在Python2中,使用print diff,在Python3中,使用print(diff)

我认为您遇到了学习 Theano 的最困难的概念挑战。

先回答你的具体问题,

  1. 不,diff 不包含数组 [[ 1., 0.],[-1., -2.]]。就 Python 而言,diff 是对 Theano 对象的引用。该对象是一个符号变量,它本身从来没有或持有一个值。

  2. 当你问如何打印出 diff 时,我的意思是 "how can I print out the result of the computation that diff is a reference to?" 好吧,从某种意义上说,你已经在这样做了:diff 是 Theano 函数 f 的输出,所以在 f 被编译然后通过 f([[1, 1], [1, 1]], [[0, 1], [2, 3]]) 执行后,你会看到结果是 [array([[ 1., 0.], [-1., -2.]]).

困难的是将符号世界与concrete/executable世界分开。 diff 存在于符号世界中,因此实际上没有任何价值。通过 theano.function(...) 编译 f 后发生的一切都在 concrete/executable 世界中。需要注意的是,符号世界中的任何东西都不会受到 concrete/executable 世界中发生的事情的影响。

同样重要的是要注意 diff 不能 "have a value" (在任何意义上)直到它所依赖的符号变量 ab 已经给出一个值。如果我提出一道数学题,告诉你 y = x * z 并问你 y 有什么价值,你无法回答,除非我也告诉你 xz 有什么价值有。这里也是如此,符号世界就像符号数学一样运作:它是一些计算的抽象定义,在提供编译和输入值之前没有也不能有值。

在开发 Theano 代码时,将符号代码从 concrete/executable 代码中分离到两个单独的区域会很有帮助。如果不这样做,您通常会发现,例如,想要调用一个符号变量 x,但随后又想给出一个具体值,该值将提供给 x 相同的名称。

我们无法打印符号变量,因为它不会记住实际值。

但是,如果您声称 diff 是一个共享变量,您可以执行以下操作: 打印 diff.get_value()