说,我们已经初始化了一个变量:
import theano.tensor as T
x = T.dscalar('x')
我不理解的是字符串参数的目的。根据文件:
通过使用字符串参数调用T.dscalar,可以创建变量 表示具有给定名称的浮点标量。如果 如果不提供参数,则该符号将为未命名。名字不是 需要,但他们可以帮助调试。
我不确定它究竟意味着什么。如何使用这个论点以及它在哪些情况下是相关的?
目前,所呈现的代码
from theano import function
x = T.dscalar('x')
y = T.dscalar('y')
z = x + y
f = function([x, y], z)
如果我从初始化中删除参数,也会运行
x = T.dscalar()
y = T.dscalar()
或使用任何其他符号,即使两者都相同,功能似乎也无法改变。
令人困惑的是,变量和参数都是' x'。以不同的名称x = T.dscalar('var1')
命名它是否有用?
那么,这个论点在什么情况下有用?
答案 0 :(得分:1)
import theano as th
import theano.tensor as T
x = T.scalar()
y = T.scalar()
th.printing.pp(x+y)
#'(<TensorType(float32, scalar)> + <TensorType(float32, scalar)>)'
x = T.scalar('x')
y = T.scalar('y')
th.printing.pp(x+y)
#'(x + y)'
还有这个:
>>> x,y = T.scalars('xy')
>>> fn = th.function([x,y], x+y)
>>> th.printing.debugprint(fn)
HostFromGpu(gpuarray) [id A] '' 3
|GpuElemwise{Add}[(0, 0)]<gpuarray> [id B] '' 2
|GpuFromHost<None> [id C] '' 1
| |x [id D]
|GpuFromHost<None> [id E] '' 0
|y [id F]
如果你有一个大型模型,给出符号变量,当你拨打theano.printing.pp
或theano.printing.debugprint
时,某些名称可以真正有用。
有时,模型可能会因形状不匹配或其他错误而崩溃,如果exception_verbosity = high
中有.theanorc
,相关模型图会像theano.printing.debugprint
一样转储。使用已定义的名称,转储可能看起来更好,并减少您在调试中花费的时间。