0

我正在尝试在 Theano 中模拟一个重复循环:

def method_a(arguments):
    ...
    return result, theano.scan.until(t.eq(a,b))

我遇到了以下奇怪的行为。让b成为一个常数。无论何时a是一个常数,一切正常。但是,当a是标量时,我收到与优化相关的错误:

ERROR (theano.gof.opt): SeqOptimizer apply <theano.gof.opt.EquilibriumOptimizer object at 0x110d0d8d0>
ERROR (theano.gof.opt): Traceback:
ERROR (theano.gof.opt): Traceback (most recent call last):
  File "[...]/lib/python2.7/site-packages/theano/gof/opt.py", line 196, in apply
    sub_prof = optimizer.optimize(fgraph)
  File "[...]/python2.7/site-packages/theano/gof/opt.py", line 82, in optimize
    ret = self.apply(fgraph, *args, **kwargs)
  File "[...]/python2.7/site-packages/theano/gof/opt.py", line 1665, in apply
    gopt.apply(fgraph)
  File "[...]/python2.7/site-packages/theano/scan_module/scan_opt.py", line 1300, in apply
    if self.belongs_to_set(nd, subset):
  File "[...]/python2.7/site-packages/theano/scan_module/scan_opt.py", line 1286, in belongs_to_set
    rep.op.inputs)
  File "[...]/python2.7/site-packages/theano/scan_module/scan_utils.py", line 452, in equal_computations
    dx.type.dtype == dy.type.dtype and
AttributeError: 'NoneTypeT' object has no attribute 'dtype'

如果有人可以帮助我理解错误,我将不胜感激。我假设 theAttributeError不是指aor b,因为我可以打印它们dtype并看到它们确实有一个。除此之外,我无法理解它。

[编辑] 这不是致命错误。代码正常运行,进程以退出代码 0 结束。看起来 Theano 正在尝试优化图形但未能这样做,这并没有真正影响程序。

4

1 回答 1

1

回溯表明,在函数 equal_compuations() 中,我们在进行一些比较时并未涵盖所有情况。

我在这里有一个修复它的 PR:

https://github.com/Theano/Theano/pull/1928

感谢您的报告。

你的 [edit] 部分,告诉我你删掉了一些错误信息。如果在优化过程中出现这种情况并带有警告,则意味着刚刚跳过了优化。优化可能不适用,但有可能通过修复,现在可以应用优化。如果是这种情况,修复程序可能会加快一些速度。

于 2014-06-19T19:41:47.303 回答