私はやや複雑で非標準的なNNアーキテクチャをデバッグしようとしています。フォワードパスを計算することはうまくいくと思いますが、予想される結果が得られますが、Adamや標準オプティマイザを使用して最適化しようとすると、非常に小さな学習率で繰り返してもどこでもナンを得ることができます。私はそれらをローカライズしようとしていますが、最初のオカレンスをキャッチして、それがどのように発生したかを検出する方法があるかどうか疑問に思っていましたか?私はtf.add_check_numerics_ops()
を試しましたが、それは何もしていないようです、あるいは私はそれを間違って使っています。逆方向パスのナンをデバッグ
11
A
答えて
18
大規模なネットワークを使用している場合は、特にNaNのデバッグが難しい場合があります。 tf.add_check_numerics_ops()
は、グラフの各浮動小数点テンソルにNaN値が含まれていないと主張するopsをグラフに追加しますが、デフォルトではこれらのチェックを実行しません。次のように代わりにそれは、あなたが定期的に実行することができますオペアンプを返し、またはステップごとに:
train_op = ...
check_op = tf.add_check_numerics_ops()
sess = tf.Session()
sess.run([train_op, check_op]) # Runs training and checks for NaNs
2
たぶん、あなたは、OPSのプリント値を疑うために、この
print_ops = []
for op in ops:
print_ops.append(tf.Print(op, [op],
message='%s :' % op.name, summarize=10))
print_op = tf.group(*print_ops)
sess.run([train_op, print_op])
のようなものを印刷OPSを追加することができますすべての操作に追加するには、add_check_numerics_ops
の行に沿ってループを実行できます。
関連する問題
- 1. 無階層のLSTMネットワークをゼロから構築する、順方向パスと逆方向パスを行う方法?
- 2. Visual Studioでデバッグ中に命令ポインタを逆方向にドラッグ
- 3. 3チャンネル画像の畳み込みレイヤーの逆方向パス
- 4. 逆方向の移動ポイント
- 5. GWT(IE)の逆方向リンク
- 6. ナン
- 7. ナン
- 8. CSS-アニメーション/アニメーション方向/逆
- 9. C#ラムダ式逆方向<=
- 10. Djangoの順方向および逆方向のフィールド関係
- 11. 順方向と逆方向の繰り返しの変更
- 12. 単一アプリケーションでの順方向ジオコーディングと逆方向ジオコーディング:必要な方向
- 13. バックボーンルーティングは、順方向か逆方向かを検出します
- 14. jQueryのUIの逆方向のサイズは
- 15. ナンは
- 16. DAEの暗黙的/逆方向のオイラー
- 17. フレックスの方向:反応 - ネイティブの行 - 逆
- 18. ユニコードテキストを逆方向にデコードする
- 19. python pandas:逆方向df列の順序
- 20. UIPickerViewの変更/逆スクロール方向
- 21. 最後のレコードから逆方向または逆方向のテーブルをクエリする効率的なメソッド
- 22. didUpdateLocationsの方向パスを再描画
- 23. 逆方向に分割しますか?
- 24. のNaN - 名 'ナンが'
- 25. ログベース2とナン
- 26. ニューラルネットワークを順方向に訓練し、逆方向に使用する方法
- 27. 逆方向のすべてのファイルを読む方法
- 28. numpy配列またはpandas DataFrameの逆方向の行を逆にする
- 29. suckerfishメニューの方向を逆にする方法(ドロップダウン)
- 30. jsの変数を逆方向に数える方法は?
問題は、train_opを実行すると、ネットワーク全体にナンバーが伝播するため、その原因を見つけることは役に立たないということです。私がやりたいことは、順方向パスと逆方向パスを実行することです。そして、nanが生成されるとすぐに、違反操作によって例外がスローされます。 –
'train_op'と' check_op'を一緒に実行すると、NaNを持つ最初のノードを報告するエラーが発生します。発生した 'tf.InvalidArgumentError'を捕捉し、その' opから 'opを抽出できます。 op'プロパティを使用します。 opのハンドルを使って、 'op.inputs [0]'プロパティにアクセスして、どのテンソルがNaN値を持っているかを知ることができます。 – mrry
これはありがとう! –