2016-06-12 70 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輸入張量,以確保所有的測試計算將傳播到哪裏出現您的錯誤點。

相關問題