如果我们使用其中一个教程示例:
>>> 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()
?你知道吗
我很难理解这种功能性的用法。有人能解释一下吗?你知道吗
Tags:
我们不能打印符号var,因为它不记得实际值。你知道吗
但是,如果您声称diff是一个共享var,您可以执行以下操作: 打印差异值()
我认为你正面临学习Theano这个最困难的概念挑战。你知道吗
先回答你的具体问题
不,
diff
不包含数组[[ 1., 0.],[-1., -2.]]
。就Python而言,diff
是对Theano对象的引用。这个对象是一个符号变量,它本身从来没有或没有值。当你问如何打印出
diff
时,我认为这意味着“我如何打印出diff
作为引用的计算结果?”从某种意义上说,你已经在做了:diff
是Theano函数的输出f
,所以在f
被编译之后,然后通过f([[1, 1], [1, 1]], [[0, 1], [2, 3]])
执行,你会看到结果是[array([[ 1., 0.], [-1., -2.]])
。困难的是将符号世界与具体的/可执行的世界分开。
diff
存在于符号世界中,因此从来没有真正的价值。通过theano.function(...)
编译f
之后发生的一切都在具体/可执行的世界中。需要注意的是,符号世界中的任何东西都不会受到具体/可执行世界中发生的事情的影响。你知道吗同样重要的是要注意,
diff
不能“有值”(在任何意义上),直到它所依赖的符号变量,a
和b
被赋予一个值。如果我提出一个数学问题,告诉你y = x * z
,问你y
有什么值,你就不能回答,除非我也告诉你x
和z
有什么值。在这里也是如此,符号世界就像符号数学一样运作:它是一些计算的抽象定义,在提供编译和输入值之前,这些计算没有也不能有值。你知道吗在开发无代码时,将符号代码从具体/可执行代码中分离出来分为两个独立的区域是很有帮助的。如果不这样做,您通常会发现,例如,想要调用符号变量
x
,但同时还想要为x
提供一个具体的值,该值具有相同的名称。你知道吗在控制台中,只需键入var名称
在python2中,使用
print diff
,在python3中,使用print(diff)
相关问题 更多 >
编程相关推荐