2016-08-02 9 views
5

Jestem nowy w uczeniu maszynowym i obecnie próbuję wyćwiczyć splotową sieć neuronową z 3 warstwami splotowymi i 1 całkowicie połączoną warstwą. Używam prawdopodobieństwa odejścia wynoszącego 25% i współczynnika uczenia się wynoszącego 0,0001. Mam 6000 obrazów treningowych o wymiarach 150 x 200 i 13 klas wyników. Używam tensorflow. Zauważam trend, w którym moja strata stale spada, ale moja dokładność wzrasta tylko nieznacznie, po czym znów spada. Moje obrazy treningowe to niebieskie linie, a moje obrazy walidacyjne to pomarańczowe linie. Oś x to kroki. enter image description hereDlaczego w splotowej sieci neuronowej można uzyskać niską stratę, ale także bardzo małą dokładność?

Zastanawiam się, czy istnieje coś, czego nie rozumiem, ani jakie mogą być możliwe przyczyny tego zjawiska? Z materiału, który przeczytałem, założyłem, że mała strata oznacza wysoką dokładność. Oto moja funkcja utraty.

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y)) 
+1

Czy słyszałeś o * przeładowaniu *? – sascha

+1

Niska utrata treningu powinna oznaczać niski błąd zestawu treningowego. Jak niska jest twoja strata? Twoja skala jest na milionach, nie jest jasne, czy strata treningu jest niska (mniej niż 1) z wykresu. –

+0

Tak, słyszałem o nadmiernym dopasowaniu, ale byłem przy założeniu, że jeśli jesteś nadmiernie dopasowany, nadal będziesz mieć wysoką dokładność w swoim dane treningowe. Zmartwiony o skali, moja strata była między 1-10 kiedy skończyłem trening. –

Odpowiedz

4

To dlatego Loss i Dokładność są dwie zupełnie różne rzeczy (dobrze przynajmniej logicznie)!

Rozważmy przykład, w którym zostały zdefiniowane jako: loss

loss = (1-accuracy) 

W tym przypadku podczas próby automatycznie zminimalizować loss, accuracy wzrasta.

Rozważmy teraz inny przykład, gdzie można zdefiniować loss jak:

loss = average(prediction_probabilities) 

Choć nie ma żadnego sensu, to technicznie jest nadal ważna funkcja straty i twój weights nadal są dostrojone w celu zminimalizowania takiego loss.

Ale jak widać, w tym przypadku nie ma związku między loss a accuracy, więc nie można oczekiwać, że oba będą jednocześnie zwiększać/zmniejszać.

Uwaga: Loss będzie zawsze zminimalizowany (co oznacza, że ​​po każdej iteracji zmniejszy się loss)!

PS: Proszę zaktualizować pytanie za pomocą funkcji loss, którą próbujesz zminimalizować.

+2

PO skomentował, że używają logów wieloklasowych na wyjściu softmax. –

+0

@Sangram Hej! Zastanawiam się, czy 'loss = average (prediction_probabilities)' jest zminimalizowane, to znaczy moje 'prediction_probabilities' są coraz bliżej prawdy gruntu, czy to nie poprawia mojej dokładności? – deeplearning

+0

Niezupełnie! Jeśli spróbujesz zminimalizować ** stratę = średnią (prediction_probabilities) **, wagi zostaną dostrojone w taki sposób, że wynik sieci będzie miał tendencję do zera, a to nie ma nic wspólnego z dokładnością. Jeśli sieć wyprowadza dokładnie zero prawdopodobieństwa predykcji dla konkretnej klasy (powiedzmy dla klasy dodatniej), dokładność jest tylko przewagą tej klasy. – Sangram

1

softmax_cross_entropy_with_logits() i dokładność to dwie różne koncepcje z różnymi definicjami formuł. W normalnych przypadkach możemy spodziewać się większej dokładności, minimalizując entropię krzyża softmax, ale są one obliczane na różne sposoby, więc nie możemy oczekiwać, że będą one zawsze zwiększane lub zmniejszane w zsynchronizowany sposób.

Używamy entropii krzyżowej softmax w CNN, ponieważ jest ona skuteczna w treningu sieci neuronowych. Jeśli wykorzystujemy stratę = (1-dokładność) jako funkcję straty, bardzo trudno jest uzyskać lepszy wynik poprzez dostosowanie wag dla naszej sieci neuronowej CNN za pomocą naszych obecnych rozwiązań treningowych dla dojrzewania wstecznego, naprawdę to zrobiłem i potwierdziłem ten wniosek, ty również możesz spróbuj sam. Być może jest to spowodowane naszym obecnym słabym rozwiązaniem treningu wstecznego, być może jest to spowodowane przez definicję naszych neuronów (musimy zmienić to na inny rodzaj neuronu?), Ale w każdym razie, obecnie użycie dokładności w funkcji straty nie jest skutecznym sposobem na szkolenie w sieci neuronowej, więc po prostu użyj softmax_cross_entropy_with_logits(), jak powiedzieli nam naukowcy z AI, już potwierdzili, że jest to skuteczne, na inne sposoby, jeszcze ich nie znamy.

+0

Obecnie uczę się nowego szkolenia online i mam nowe zrozumienie, dlaczego potrzebujemy użyć softmax_cross_entropy_with_logits(). Powód jest bardzo prosty: funkcja softmax cross entropy jest funkcją wypukłą, ale większość innych funkcji nie jest. Tak więc możemy znaleźć globalną wartość minimalną poprzez znalezienie lokalnej minimalnej wartości w funkcji wypukłej. Ale dla funkcji nie wypukłej, np. strata = (1-dokładność), ma wiele lokalnych minimalnych wartości, więc nie można znaleźć odpowiednich wartości W & b z naszymi algorytmami wstecznej propagacji na nich. –

Powiązane problemy