2016-12-14 4 views
1

環境情報生成NaNの勾配

オペレーティングシステムのコンピューティング:CUDAの 0.10.0rc0

インストールバージョン: のRed Hat Enterprise Linux Serverは

Tensorflowのバージョン6.6をリリースおよびcuDNN: /usr/local/cuda/lib64/libcudart.so.7.5.23

私は一時的な注意戦略(https://arxiv.org/abs/1608.02927)でモデルを実行しています。私は損失を計算するためにtf.nn.seq2seq.sequence_loss_by_example()を使用し、損失を最小限に抑えるためにadam gradient(lr:0.001)を使用します。損失は​​NaNではありませんが、一部の勾配はNaN値になります。私がバニラの注目戦略を使用すると、このNaN問題は発生しません。

すべてのハイパーパラメータを出力することもできます。それらの値は、グラデーションがNaNになるまで実際の値になります。

誰かがこの問題を解決するのに役立ちます。前もって感謝します。

部分コード

attn_vec = tf.reduce_sum(attention_states * y, [2]) # initial attention weights 
if step > 0: 
    history = tf.pack(acc_sum) 
    max_hist = tf.reduce_max(attn_vec, 1, keep_dims=True) 
    cur_scores = tf.exp(attn_vec - max_hist)/tf.reduce_sum(tf.exp((history-max_hist)), 0) # reweight attention weights 
else: 
    cur_scores = tf.exp(attn_vec - tf.reduce_max(attn_vec, 1, keep_dims=True)) 
    m = cur_scores/tf.reduce_sum(cur_scores, 1, keep_dims=True) 
    acc_sum.append(attn_vec) 
+1

どのように初期化されています体重?あなたがいくつかのコードを提供できればそれは役に立ちます – martianwars

+0

もっと小さい学習率でしょうか? –

+0

私はxavierイニシャライザを使用しましたが、学習の速度が遅いと助けになりませんでした。 – Zodiac

答えて

0

私はすぐに答えを持っていないが、このSOの質問は、問題のこれらの種類をデバッグする方法の良い要約があります:Debugging nans in the backward pass

+0

ありがとうございます。しかし、私はすべてのハイパーパラメータとグラデーションをプリントアウトして、NaNが注意の部分で行われていることを確認しました。それでもNaNを生成する理由を理解できませんでした。私はclip_by_valueをmaxを1.0、minを-1.0として使用しましたが、助けにはなりませんでした。 – Zodiac