解开 Theano 错误的原因
Untangling the cause of an error in Theano
我的代码中有一个错误,但由于 theano 的工作方式,很难找到它的确切原因。
按照异常详细信息中的提示,我设置了 theano.config.optimizer='None'
和 theano.config.exception_verbosity='high'
,但这还不够。
例如,在我的例子中,两个张量之间的点积存在问题。堆栈跟踪引导我完成了很多工作,并引导我找到了一个似乎包含在其中的特定函数,在某个地方,对 theano.tensor.dot
的有问题的调用,但我找不到那部分代码的确切位置,因为我'我试图通过keras实现一些东西,它变得更加复杂和纠结。
有什么方法可以获取有关应用节点的更多详细信息?我试过使用 StepMode,因为它似乎附加到节点上,但如果有办法让该工具打印出执行节点中代码的确切行,我不知道这是什么。我尝试在问题发生时使用它来打印堆栈跟踪,但它打印的堆栈跟踪与异常几乎相同。
如果您想在代码中找到使用 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 的方法可以让你做类似的事情。
你应该尝试使用 theano test_values。这样,异常将在错误发生的行上引发,而不是在图形编译之后。
您需要将 theano.config.compute_test_value
标志更改为 'raise'
以便在输入张量没有 test_value 时出现错误,以确保所有测试计算将传播到发生错误的位置。
我的代码中有一个错误,但由于 theano 的工作方式,很难找到它的确切原因。
按照异常详细信息中的提示,我设置了 theano.config.optimizer='None'
和 theano.config.exception_verbosity='high'
,但这还不够。
例如,在我的例子中,两个张量之间的点积存在问题。堆栈跟踪引导我完成了很多工作,并引导我找到了一个似乎包含在其中的特定函数,在某个地方,对 theano.tensor.dot
的有问题的调用,但我找不到那部分代码的确切位置,因为我'我试图通过keras实现一些东西,它变得更加复杂和纠结。
有什么方法可以获取有关应用节点的更多详细信息?我试过使用 StepMode,因为它似乎附加到节点上,但如果有办法让该工具打印出执行节点中代码的确切行,我不知道这是什么。我尝试在问题发生时使用它来打印堆栈跟踪,但它打印的堆栈跟踪与异常几乎相同。
如果您想在代码中找到使用 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 的方法可以让你做类似的事情。
你应该尝试使用 theano test_values。这样,异常将在错误发生的行上引发,而不是在图形编译之后。
您需要将 theano.config.compute_test_value
标志更改为 'raise'
以便在输入张量没有 test_value 时出现错误,以确保所有测试计算将传播到发生错误的位置。