2016-05-10 9 views
5

私はKerasを使って自分のニューラルネットワークからいくつかのNaN出力を得ています。 10,000の結果につき約1つのNaNしか得られません。もともと、私はrelu活性化層を最終的なsoftmax層に供給していました。これにより、より多くのNaN結果が得られました。私は構成ネットワークの最後の2つの高密度層の活性化関数をreluからsigmoidに変更しました。これにより問題は改善されましたが、私はまだNaNを取得します。ナンを完全に排除する方法についてのアドバイスはありますか?Keras Neural Nets、出力のNaN値を削除するにはどうすればよいですか?

model = Sequential() 
model.add(InputLayer((1, IMG_H, IMG_W))) 

model.add(Convolution2D(32, 3, 3, activation = 'relu')) 
model.add(Convolution2D(32, 3, 3, activation = 'relu')) 
model.add(MaxPooling2D(pool_size = (2, 2))) 

model.add(Dropout(0.3)) 

model.add(Convolution2D(64, 3, 3, activation = 'relu')) 
model.add(Convolution2D(64, 3, 3, activation = 'relu')) 
model.add(MaxPooling2D(pool_size = (2, 2))) 

model.add(Dropout(0.3)) 

model.add(Flatten()) 
model.add(Dense(256, activation = 'sigmoid')) 
model.add(Dropout(0.3)) 
model.add(Dense(64, activation = 'sigmoid')) 
model.add(Dropout(0.3)) 
model.add(Dense(categories, activation = 'softmax')) 
+1

出力/損失のNaNは、常に非常に悪い兆候です。入力を前処理/正規化しましたか?あなたの学習率は十分に小さいですか?データが正しく前処理されていれば、NaNは決して発生しません。 [This](http://cs231n.github.io/neural-networks-2/)が役立つかもしれません。 – sascha

+0

私は1と0の間で入力を正規化しました。私は0.01から0.001の小さな学習率を使用しました。今私はそれが役立つかどうかを確認するために体重の正則化を追加しています。 – chasep255

+0

0-1の間で正規化することは、必ずしもあなたが望むものではありません。これはSklearnのMinMaxスケーラーのように聞こえる。あなたはsklearnでStandardScalerと呼ばれる平均と分散を正規化したいこれは、SGDベースのアルゴリズムを使用する場合に非常に重要です。あなたの場合、平均は>> 0.0になります。あなたは分散を変更しなかったと思います。 – sascha

答えて

2

は、あなたが問題を解決してきたように見えますが、今後の参考のために他のもののうち、あなたがNaN入力を持っているかどうかをチェックをお勧めしますnice questionがあります。

関連する問題