Tensorflow a prawdopodobieństwo właściwego odczytu

0

Hej, zaprojektowałem sobie pewną sieć neuronową pozwalającą na odczytywanie cyfr. Jak wiadomo, sieć neuronowa nie jest nieomylna, czasem zdarza jej się prawidłowo przyporządkować wartość, czasem nie. Pytanie do bardziej doświadczonych korzystających z biblioteki Tensorflow - czy istnieje jakiś sposób, który pozwoliłby na obliczenie lub odczyt współczynnika prawdopodobieństwa, że dana cyfra została poprawnie odczytana?

0

Softmax + odpowiednia funkcja straty poczytaj tutaj jest fajnie wytłumaczone -> https://ljvmiranda921.github.io/notebook/2017/08/13/softmax-and-the-negative-log-likelihood/

0
machineko napisał(a):

Softmax + odpowiednia funkcja straty poczytaj tutaj jest fajnie wytłumaczone -> https://ljvmiranda921.github.io/notebook/2017/08/13/softmax-and-the-negative-log-likelihood/

Hmm.. spróbowałem coś z softmaxem, jednak zwraca mi on jedynie wartość 0/1 - dlaczego może się tak dziać?

0

Chodzi Ci o metryki testujące sieć, cóż sama sieć o sobie tego nie może sprawdzić:), trzeba to "odgrzebać" z danych. Są dwie takie metryki: precision i recall.
Precision mówi ile z rozpoznanych obiektów, jako coś tam, naprawdę nimi jest (chyba o to Ci chodzi).
Recall odpowiada na pytanie ile z obiektów, które naprawdę czymś są, są poprawnie rozpoznane.
Tensofrlow ma takie funkcje, Poeksperymentuj:
https://www.tensorflow.org/api_docs/python/tf/metrics/recall
https://www.tensorflow.org/api_docs/python/tf/metrics/precision

0
kamilos95 napisał(a):
machineko napisał(a):

Softmax + odpowiednia funkcja straty poczytaj tutaj jest fajnie wytłumaczone -> https://ljvmiranda921.github.io/notebook/2017/08/13/softmax-and-the-negative-log-likelihood/

Hmm.. spróbowałem coś z softmaxem, jednak zwraca mi on jedynie wartość 0/1 - dlaczego może się tak dziać?

Tak jak mówiłem poczytaj artykuł wyżej softmax to skala prawdopodobieństw np. majac mnist masz 10 cyfr zalozmy ze siec dziala poprawnie i masz te accuracy na poziomie ~94%+.
Z sieci wychodzi wektor prawdopodobienstwa z jakimi siec przewiduje dane klasy wrzuciles obrazek z cyfra 3 i siec wypluwa -> [0.01, 0.02, 0.09, 0.85, 0.01 ...] i na tej podstawie jestes w stanie stwierdzic ze następuje predykcja cyfry 3 z prawdopodobienstwem (w duzym uproszczeniu bo to nie jest prawdą do końca :]) 85% sprawdzasz to z F1 scorem dla setu testowego i sprawdzasz jak dobrze predykuje 3 i czy mozesz tej predykcji ufac jesli tak to po prostu przyjmujesz ten output jako 100% predykcje.

Sytuacja ma sie inaczej jak model bedzie slabo wyuczony albo numerki beda bardzo podobne wtedy jako output bedziesz mial wektor np. [0.02, 0.44, 0.22, 0.28 ,...] wtedy model dokonuje predykcji cyferki 1 z prawdopodobienstwem 44% 3 -> 22% i 4 -> 28% etc. Koncept ten jest duzo lepiej wytlumaczony w krotkim blogposcie ktory wyslalem

0

No generalnie niby wiadomo o co chodzi, pytanie w jaki sposób można by wypisać cały wektor z wartościami?
bo wypisanie 'prediction' printem:

y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
prediction = tf.argmax(y_conv, 1)

daje w wyniku:

'Tensor("ArgMax:0", shape=(?,), dtype=int64)'

Co by należało zmienić aby wypisany został cały wektor?

0

W takich przypadkach dobrze jest przeprowadzić introspekcje obiektu:

print(type(prediction))
print(dir(prediction))
print(prediction.__dict__)

Jeżeli obiekt jest instancja klasy pandas.DataFrame, to wartości powinny być dostępne w predition.values.

1 użytkowników online, w tym zalogowanych: 0, gości: 1