我正试图在Theano中模拟一个repeat-until循环:
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'
如果有人能帮我理解错误,我会很感激。我假设AttributeError
没有引用a
或b
,因为我可以打印他们的dtype
并看到他们确实有一个{{1}}。除此之外,我无法理解它。
[编辑]这不是致命的错误。代码正常运行,进程以退出代码0结束。看起来Theano正在尝试优化图表,但没有这样做,这对程序没有任何影响。
答案 0 :(得分:1)
回溯表明在函数equal_compuations()中,我们没有涵盖所有情况,在进行一些比较时。
我在这里有一个PR修复它:
https://github.com/Theano/Theano/pull/1928
感谢您的报告。
您的[编辑]部分,表明您已删除部分错误消息。如果在优化期间发生这种情况并发出警告,则表示刚刚跳过优化。优化可能不适用,但有可能通过修复,现在优化适用。如果是这种情况,可能会加快修复速度。