2016-06-12 72 views
0

我在我的代码中有一个错误,但找到它的确切原因是困难的,因为theano的工作原理。解开Theano中的错误原因

按照异常详情中的提示,我设置了theano.config.optimizer='None'theano.config.exception_verbosity='high',但这并不足以说明问题。

例如,在我的情况下,两个张量之间的点积存在问题。堆栈跟踪导致我经历了很多并且涉及到一个特定的函数,它似乎包含在某个地方,对theano.tensor.dot有问题的调用,但我找不到代码的确切位置,因为我试图实现通过keras的东西,它变得更加复杂和纠结。

有什么办法可以获得有关应用节点的更多细节?我试过使用StepMode,因为它似乎附加在节点上,但是如果有一种方法可以使该工具打印节点中代码的执行行,我不知道它是什么。我试图在发生问题时使用它来打印堆栈跟踪,但它会打印与异常相同的堆栈跟踪。

回答

1

如果你想找到代码中使用theano.tensor.dot你可以使用包装代码猴补丁它的斑点traceback.print_stack

import traceback 
original_dot = theano.tensor.dot 

def debug_wrapper(*args,**kw): 
    traceback.print_stack() 
    return original_dot(*args,**kw) 
theano.tensor.dot = debug_wrapper 

这样,任何时候theano.tensor.dot被称为(这是修补后),它会向你展示如追踪消息中的堆栈,并仍然是它的工作。请注意,我对theano并不是很熟悉,所以这是一个通用的python调试解决方案,可能有一些特定于theano的方法可以让您做类似的工作。

+0

谢谢!我其实正在考虑做某种事情。事实上,我把栈轨迹放在其他地方,但不知怎的,我不会将它放在有问题的函数中。我明天会试试,因为它已经很晚了 – user1999728

0

您应该尝试使用theano test_values。这样,异常将在错误发生的行上完全提出,而不是在编译图之后。

您需要将theano.config.compute_test_value标志更改为'raise',让你得到一个错误,如果没有不test_value输入张量,以确保所有的测试计算将传播到哪里出现您的错误点。

相关问题