试图理解变量......我可以打印它们吗?
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.]]
?
如何在我打电话后打印出 diff
哟 f()
?
我无法理解这种函数式的用法。谁能解释一下?
在控制台中,只需输入变量名称
>>> diff
在Python2中,使用print diff
,在Python3中,使用print(diff)
我认为您遇到了学习 Theano 的最困难的概念挑战。
先回答你的具体问题,
不,diff
不包含数组 [[ 1., 0.],[-1., -2.]]
。就 Python 而言,diff
是对 Theano 对象的引用。该对象是一个符号变量,它本身从来没有或持有一个值。
当你问如何打印出 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" (在任何意义上)直到它所依赖的符号变量 a
和 b
已经给出一个值。如果我提出一道数学题,告诉你 y = x * z
并问你 y
有什么价值,你无法回答,除非我也告诉你 x
和 z
有什么价值有。这里也是如此,符号世界就像符号数学一样运作:它是一些计算的抽象定义,在提供编译和输入值之前没有也不能有值。
在开发 Theano 代码时,将符号代码从 concrete/executable 代码中分离到两个单独的区域会很有帮助。如果不这样做,您通常会发现,例如,想要调用一个符号变量 x
,但随后又想给出一个具体值,该值将提供给 x
相同的名称。
我们无法打印符号变量,因为它不会记住实际值。
但是,如果您声称 diff 是一个共享变量,您可以执行以下操作:
打印 diff.get_value()
如果我们使用其中一个教程示例:
>>> 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.]]
?
如何在我打电话后打印出 diff
哟 f()
?
我无法理解这种函数式的用法。谁能解释一下?
在控制台中,只需输入变量名称
>>> diff
在Python2中,使用print diff
,在Python3中,使用print(diff)
我认为您遇到了学习 Theano 的最困难的概念挑战。
先回答你的具体问题,
不,
diff
不包含数组[[ 1., 0.],[-1., -2.]]
。就 Python 而言,diff
是对 Theano 对象的引用。该对象是一个符号变量,它本身从来没有或持有一个值。当你问如何打印出
diff
时,我的意思是 "how can I print out the result of the computation thatdiff
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" (在任何意义上)直到它所依赖的符号变量 a
和 b
已经给出一个值。如果我提出一道数学题,告诉你 y = x * z
并问你 y
有什么价值,你无法回答,除非我也告诉你 x
和 z
有什么价值有。这里也是如此,符号世界就像符号数学一样运作:它是一些计算的抽象定义,在提供编译和输入值之前没有也不能有值。
在开发 Theano 代码时,将符号代码从 concrete/executable 代码中分离到两个单独的区域会很有帮助。如果不这样做,您通常会发现,例如,想要调用一个符号变量 x
,但随后又想给出一个具体值,该值将提供给 x
相同的名称。
我们无法打印符号变量,因为它不会记住实际值。
但是,如果您声称 diff 是一个共享变量,您可以执行以下操作: 打印 diff.get_value()