在Theano中解开错误的原因

时间:2016-06-12 20:32:14

标签: python theano

我的代码中有一个错误,但由于theano的工作方式很难找到确切的原因。

根据例外详细信息中的提示,我设置了theano.config.optimizer='None'theano.config.exception_verbosity='high',但这并不足以告诉我。

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

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

2 个答案:

答案 0 :(得分:1)

如果您想在代码中找到使用theano.tensor.dot的位置,可以使用traceback.print_stack的包装代码对其进行monkeypatch:

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的方法可以让你做类似的事情。

答案 1 :(得分:0)

你应该尝试使用theano test_values。这样,异常将在错误发生的行上准确引发,而不是在编译图形之后引发。

您需要将theano.config.compute_test_value标志更改为'raise',以便在没有test_value的输入张量时出现错误,以确保所有测试计算都将传播到发生错误的地方。