2017-03-24 17 views
2

私は数日からこの問題に直面しています。私はどこでミスをしているのか分かりません。私のコードは長いですし、ここで、ここでテンソルを使ってニューラルネットワークを訓練した後に生成されるNans

をすべてを再現することができませんでした最初のケ​​ースでの結果である:

Accuracy: 0.1071 Error: 1.45003 
Accuracy: 0.5149 Error: 0.259084 
Accuracy: 0.7199 Error: 0.197301 
Accuracy: 0.7934 Error: 0.138881 
Accuracy: 0.8137 Error: 0.136115 
Accuracy: 0.8501 Error: 0.15382 
Accuracy: 0.8642 Error: 0.100813 
Accuracy: 0.8761 Error: 0.0882854 
Accuracy: 0.882 Error: 0.0874575 
Accuracy: 0.8861 Error: 0.0629579 
Accuracy: 0.8912 Error: 0.101606 
Accuracy: 0.8939 Error: 0.0744626 
Accuracy: 0.8975 Error: 0.0775732 
Accuracy: 0.8957 Error: 0.0909776 
Accuracy: 0.9002 Error: 0.0799101 
Accuracy: 0.9034 Error: 0.0621196 
Accuracy: 0.9004 Error: 0.0752576 
Accuracy: 0.9068 Error: 0.0531508 
Accuracy: 0.905 Error: 0.0699344 
Accuracy: 0.8941 Error: nan 
Accuracy: 0.893 Error: nan 
Accuracy: 0.893 Error: nan 

私はいろいろなことを試してみましたが、私は間違いを犯していた場所を把握することができませんでした。私はすべてオプティマイザ を試してみました

self._error = -tf.reduce_sum(y*pred+ 1e-9)) 
self._error = -tf.reduce_sum(y*pred) 
self._error = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=pred, labels=y)) 
self._error = tf.reduce_mean(-tf.reduce_sum(y * tf.log(pred+1e-8),reduction_indices=1)) 

out = tf.nn.softmax_cross_entropy_with_logits(logits = pred, labels=y) 
self._error= tf.reduce_mean(out) 

異なるものに

1)を変更し、クロスエントロピーの計算は - SGD - アダム - adagrad - 提供rmsprop

私が使用している両方のデフォルトのオプティマイザテンソルフローによって測定し、異なるパラメータを手動で適用した。私は両方の1.0と0.0

ウェイトを試してみました
:指すように私も0.00001

バイアスほどの小さな学習レートでチェックしてtf.truncated_normal_initializer(STDDEV = 0.1で初期化
、 DTYPE = tf.float32)

ネットワーク:
FC784 - FC256 - FC128 - FC10
私はそれの別の変形も試みました。

活性化機能:
- Relu - TANH - 漏洩reluのtf.maximum(入力、0.1 *入力)

データ:255でそれを除算することにより正規化
MNISTデータセットデータセットはKerasのものです。

私はこの質問が様々なstackoverflowの質問で尋ねられていることを知っています。

+0

いつかのデバイスは何らかの理由で 'None'答えを返しますが、これは正常ですが、これをどう扱うべきですか? NANは "まだ準備されていません"、 "リソースはビジー"、 "値はオーバーフローしました"などです。すべてのリソースへのアクセスには 'delay'があります。コンピュータ上で' 1/CPU_CLOCK'遅延があります。 ** 0 /なし= NAN ** – dsgdfg

+0

私は3〜4システムでコードを実行しました。私はCPUとGPUの両方を使用していますが、これは同じケースです。 –

答えて

0

上記の情報から、何が間違っているかを知るのは難しいです。はい、神経回路網をデバッグするのは非常に面倒です。幸運なことに、Tensorflow Debuggerは、あらゆる繰り返しでネットワークを踏み越えて体重を分析できる優れたツールです。

tfdbgで次のコマンドを実行して、グラフに表示される最初のnanまたはinfの値を取得します。

run -f has_inf_or_nan 
0

あなたのラベルの非は数の-ソフトマックス・出力し-1を超えていることを確認します。このような場合、sigmoid_cross_entropy_with_logitsはエラーを発生させる代わりにNaNを生成します。通常、これはラベルの範囲が1..Nですが、softmaxインデックスが0から実行されている場合に発生します。N-1

関連する問題