2016-05-10 17 views
5

Otrzymuję kilka wyników NaN z mojej sieci neuronowej za pomocą Keras. Dostaję tylko około jednego NaN na 10 000 wyników. Pierwotnie miałem warstwę aktywującą relu, która zasilała ostatnią warstwę softmax. To dało więcej wyników NaN. Zmieniłem funkcję aktywacji dla dwóch ostatnich gęstych warstw w sieci konstytucyjnej z relu na sigmoid. To sprawiło, że problem był lepszy, ale nadal otrzymuję NaN. Jakieś rady, jak mogę całkowicie wyeliminować Nan?Sieci neuronowe Keras, Jak usunąć wartości NaN na wyjściu?

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

NaNs w wynikach/stratach są zawsze bardzo złym znakiem. Czy preprocesujesz/normalizujesz swoje wejście? Czy twoja nauka jest wystarczająco mała? NaN nie powinny nigdy występować, jeśli dane są poprawnie przetworzone. [This] (http://cs231n.github.io/neural-networks-2/) może pomóc. – sascha

+0

I znormalizowałem moje wejście między 1 a 0. Użyłem małej szybkości uczenia się pomiędzy 0,01 a 0,001. W tej chwili dodaję regulację masy ciała, aby sprawdzić, czy to pomaga. – chasep255

+0

Normalizacja pomiędzy 0-1 niekoniecznie jest tym, czego potrzebujesz. To brzmi jak skaler MinMax w sklearn. Chcesz znormalizować średnią i wariancje aka StandardScaler w sklearn. Jest to bardzo ważne przy stosowaniu algorytmów opartych na SGD! W twoim przypadku średnia wyniosła> 0,0 i myślę, że nie zmieniłeś wariancji. – sascha

Odpowiedz

2

Wygląda jakbyś rozwiązał problem, ale na przyszłość jest nice question która między innymi zaleca sprawdzenie, czy trzeba wejść Nan.