Sieci neuronowe rozpoznawanie cyfr

1

Witam,
robie aplikacje, ktora rozpoznaje cyfry (0-9) napisane w postaci mapy bitowej 5x6. Ogarnalem juz uczenie i testowanie tej sieci, jest 30 neurownow w warstwie wejsciowej, 17 w ukrytej i powinno byc 10 w wyjsciowej kazdy reprezentuje jakas cyfre. Na razie zrobilem 1 neuron w warstwie wyjscia i mam outputy dla kazdej mapy testowej w postaci 0.xxxxx, nie mam pomyslu jak ma wygladac rozpozanie cyfry na podstawie tego output jak zrobie dla 10 neuronow wyjsciowych. Moze mi ktos przyblizyc sama logike tego rozpoznania cyfry juz w warstawie wyjsciowej ?

1

Przy dziesięciu neuronach, każda z liczb wyjściowych oznacza prawdopodobieństwo rozpoznania danej cyfry przez sieć (tzn. zakładając, że tak swoją sieć wytrenujesz :-P) - musisz więc zwyczajnie wybrać ten neuron, który zwrócił największą wartość.

1

skąd bede wiedział, który neuron odpowiada za która liczba ?

To pytanie jest o tyle intrygujące, że nie powinno mieć miejsca; spróbujmy tak: w jaki sposób uczysz swoją sieć?

2

Czyli jak wprowadzam dane do nauki to mam w jakis sposob powiedziec neuronowi ze ta bitmapa odpowiada np cyfrze 0 ?

Tak; w przypadku wykorzystywanego przez Ciebie backpropagation chodzi o to, abyś pokazał sieci cyfrę 3 i oczekiwał wyjścia [0, 0, 0, 1, 0, 0, 0, 0, 0, 0], pokazał cyfrę 0 i oczekiwał wyjścia [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] etc.

Algorytm wstecznej propagacji będzie powoli usprawniał sieć i po czasie np. dla cyfry 3 może zwrócić [0.1, 0.0, 0.8, 0.0, 0.0, ...], które należy rozumieć tak: to na 10% jest cyfra 0, na 80% cyfra 3.

0

Tak; w przypadku wykorzystywanego przez Ciebie backpropagation chodzi o to, abyś pokazał sieci cyfrę 3 i oczekiwał wyjścia [0, 0, 0, 1, 0, 0, 0, 0, 0, 0], pokazał cyfrę 0 i oczekiwał wyjścia [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] etc.

Algorytm wstecznej propagacji będzie powoli usprawniał sieć i po czasie np. dla cyfry 3 może zwrócić [0.1, 0.0, 0.8, 0.0, 0.0, ...], które należy rozumieć tak: to na 10% jest cyfra 0, na 80% cyfra 3.

W twoim przykladzie jest to zrozumiale bo masz liste z 10 miejscami i tam gdzie jest 1, tej cyfrze odpowiada ta liczba, ja mam to zrobic dla bitmap ktore przedstawiaja cyfre np:
Dla cyfry 1:

1 1 1 1 1
1 0 0 0 1
1 0 0 0 1
1 0 0 0 1
1 0 0 0 1
1 1 1 1 1

Dla cyfry 7:

1 1 1 1 1
0 0 0 0 1
1 1 0 1 1
1 0 1 1 1
1 0 1 1 1
1 0 1 1 1

1 0 0 0 0
1 1 1 0 1
1 1 0 1 1
1 0 0 0 1
1 1 0 1 1
1 1 0 1 1

I kazda cyfra ma po 3 rozne przyklady do nauki sieci, i potem 2 rozne przyklady bitmap liczby do testowania. U Ciebie rozumiem o co chodzi tylko nie wiem jak zrobic to na takich danych

1

Mówiłem o wyjściu sieci, a nie wejściu; na wejściu możesz mieć i setkę neuronów, nie zmienia to działania warstwy wyjściowej.

1

Do takich modeli uzywa się na wyjściu softmax:
https://en.wikipedia.org/wiki/Softmax_function

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