私は損失のためにtf.nn.sigmoid_cross_entropy_with_logits関数を使用しています。それはNaNに向かいます。Tensorflow Loss NaNに行く
私は既にテンソル分割が行われている1つの場所でグラデーションのクリッピングを使用しています。ゼロによる除算を防ぐためにイプシロンを追加しました。また、すべてのsoftmax関数の引数にもイプシロンが追加されています。
しかし、私はNaNの中途半端なトレーニングを受けています。
私が逃したテンソルフローは既知の問題はありますか? トレーニング中に無作為にNaNに行き、すべてを破棄するので、かなりイライラします。
また、列車のステップがNaNになり、その例を完全にスキップすることができますか?助言がありますか?
編集:ネットワークは神経チューリングマシンです。
EDIT 2:コードhereの一部をアップロードしました。 コメントはまだありません。GravesらがNTMの論文をすでに読んでいる人には、ほとんどの意味があります。ここをクリックしてください:https://arxiv.org/abs/1410.5401
私のコードのすべてが、紙の作者の意図と正確に一致するかどうかはわかりません。私は練習としてこれをやっているだけで、私は私を修正する指導者がいません。
EDIT 3:
optimizer = tf.train.AdamOptimizer(self.lr)
gvs = optimizer.compute_gradients(loss)
capped_gvs =\
[(tf.clip_by_value(grad, -1.0, 1.0), var) if grad != None else (grad, var) for grad, var in gvs]
train_step = optimizer.apply_gradients(capped_gvs)
私はそれなしでエラーになったので、私はif grad != None
条件を追加する必要がありました。ここでは勾配クリッピングのためのコードです。問題はここにありますか?
潜在的な解決策:私は現在、tf.contrib.losses.sigmoid_cross_entropyをしばらく使用していますが、これまでのところ、損失は発散していません。もう少しテストして報告します。
最初の考えとして、学習率を下げてみてください。 – sygi
私はグラデーションクリッピングでAdamオプティマイザを使用していますので、学習率をどの程度変えれば助けになるのでしょうか。私は学習率を下げようとしましたが、それでもNaNに行きました。実際、率を下げる前に問題なくトレーニングを終えてしまったので、私は何とか問題を解決したと思った。 – SilverSlash
各レイヤーの前に非常に小さなガウスノイズを追加しようとしましたか? – broncoAbierto