2017-08-25 21 views
0

私は11層に完全に畳み込みネットワークを訓練しています。入力は画像480x640x1で、出力ラベルは画像480x640x1です。トレーニングのために私はsparse_softmax_cross_entropy_with_logits()を使用しています。しかし、私が得意とする損失の価値はNaNです。参考のために私のコードのスニペットを添付しました。Tensorflow損失値がsparse_softmax_cross_entropy_with_logitsとナン(ある)

x=tf.placeholder(tf.float32,(None,480,640,1)) 
y=tf.placeholder(tf.int32,(None,480,640,1)) 
logits=Model1(x) 
loss=tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits,labels=tf.squeeze(y,squeeze_dims=[3]))) 
optimizer=tf.train.AdamOptimizer(learning_rate=lr) 
Trainables=optimizer.minimize(loss) 

だからMODEL1形状(6,480,640,1)のテンソルを返す(バッチサイズが6)とyのプレースホルダーは、(6,480,640,1)です。どのようにして損失テンソルが得られるNaN値を解決するのですか?あなたがNaNを得ている理由について

答えて

0

いくつかの初期の思考:

  1. は、あなたの学習率をチェックし、いくつかの小さな値など1e-5にそれを軽減し、それが行く方法を見てみてください。あなたが比較的大きな学習率を持っているからかもしれません。
  2. あまりにも積極的に更新を防止するためにtf.clip_by_valueによって勾配をクリップ。
  3. 使用している活性化関数とは何ですか? 11層ある場合は、tf.nn.reluをアクティベーション機能として使用することができます。
  4. あなたの計算グラフと間違って何かがあるかもしれません、あなたは、各レイヤにtf.check_numericsを追加することでこれをテストすることができますし、NaNは、特定の層から来るかどうかを確認します。
関連する問題