2016-06-12 28 views
0

私のコードにはバグがありますが、theanoの仕組みのために正確な原因を見つけることは困難です。Theanoのエラーの原因を解消

例外の詳細のヒントに続いて、私はtheano.config.optimizer='None'theano.config.exception_verbosity='high'と設定しましたが、それだけではわかりません。

私の場合、例えば、2つのテンソルの間にドットプロダクトに問題があります。 stacktraceはたくさんの機能を持っていて、その中に含まれていると思われる特定の関数(theano.tensor.dot)への問題のある呼び出しにつながりますが、コードのどこにあるのか正確には分かりません。ケラを通して物事、それはさらに複雑になり、絡まってしまいます。

適用ノードの詳細を確認する方法はありますか?私はStepModeを使用しようとしましたが、ノードに接続されているようですが、ノードのコードが実行された正確な行をそのツールで印刷する方法がある場合は、何か分かりません。私は問題が発生したときにstacktraceを印刷しようとしましたが、例外と同じスタックトレースしか印刷しません。

答えて

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を試してください。そうすれば、エラーが発生した行で例外が発生し、グラフのコンパイル後では例外は発生しません。

フラグを'raise'に変更する必要があります。これにより、テストテンソルがtest_valueなしでエラーが発生し、すべてのテスト計算がエラーが発生したポイントに伝播することが確認されます。

関連する問題