Sieci neuronowe,alg propagacji wstecznej

0

Witam,

Chciałbym zapytać o jak wykonać zadanie poniżej.
NAI.png

Rozważmy zbiór wszystkich możliwych wektorów binarnych długości . Elementy tego zbioru odpowiadają kodom znaków w standardzie ASCII (http://pl.wikipedia.org/wiki/ASCII), np. wektor

1 0 0 0 0 0 1
reprezentuje w tym modelu zależności znak (decymalna wartość kodu ASCII równa ), a wektor

1 1 0 0 0 0 1
odpowiada znakowi (decymalna wartość kodu ASCII równa ).

Zadanie

Zaprojektuj, zaimplementuj (dowolny język programowania) i wytrenuj sieć neuronową, która dla zadanego zestawu wejściowego wektorów dokona jego klasyfikacji ze względu na to, czy ciąg jest ciągiem kodów ASCII liter Twojego imienia, gdzie jest liczbą liter Twojego imienia nad alfabetem angielskim (zakładamy stosowną podmianę polskich znaków). Za poprawnie klasyfikowane uznajemy wszystkie możliwe warianty zapisu imion z użyciem małych i dużych liter, np.

JAN, JAn, JaN, jAN, Jan, jAn, jaN, jan.

Jako algorytmu uczenia zaprojektowanej sieci neuronowej zastosuj metodę wstecznej propagacji błędów dla samodzielnie dobranego zbioru trenującego wektorów binarnych długości .

Zbadaj kolejno:
efektywność procesu nauki sieci ze względu na wybór typu dostępnych perceptronów oraz wartość współczynnika kroku nauki ,
efektywność klasyfikacji danych wejściowych w zależności od wartości parametrów sterujących funkcjami aktywacji.
Dla każdego z w/w zadań badawczych wprowadź własne miary efektywności i uzasadnij ich wybór.

Uwaga! Zaproponowana przez Państwa implementacja sieci neuronowej nie może bazować na gotowych bibliotekach generujących tego rodzaju struktury.

Wytyczne rozwiązania

rozwiązanie składa się z kodu źródłowego w danym języku programowania oraz dokumentacji opisowej w postaci pliku w formacie pdf,
kod źródłowy zawiera:
imię, nazwisko i numer indeksu autora,
niezbędne komentarze,
dokumentacja opisowa zawiera:
imię, nazwisko i numer indeksu autora,
schemat graficzny sieci neuronowej,
szczegółowy opis użytych neuronów (wejście, wagi wejściowe, funkcja aktywacji, wyjście),
wykresy efektywności procesu nauki ze względu na wartość współczynnika kroku nauki ,
wykresy efektywność klasyfikacji danych wejściowych w zależności od wartości parametrów sterujących funkcjami aktywacji,
opis zastosowanych miar efektywności i uzasadnienie ich wyboru.

Potrafie napisac prosta sieć neuronowa i zaimplementować algorytm propagacji w tej <image>BPropagation.png</image> def. Natomiast nie wiem jak tego uzyc w stosunku do tych imion , jak dobierac wagi, jak dobierac progi. czy to ma byc tak ze zaszywam sobie kod ASCI litery mojego imienia np K
mnoze x1w1+x2w2+x(n)*w(n) i wynik jesli jest inny niz prawidlowy kod dziesietny asci danej litery to na wyjscie daje 0?

Pozdrawiam.

1

jak dobierac wagi, jak dobierac progi

Ty sobie robisz jaja? Bo twierdzisz że rozumiesz o co chodzi w BP i umiesz zaimplementować a następnie pytasz o coś co pokazuje że w ogóle nie masz pojęcia o czym piszesz. Jak to jest?
Przecież ty masz tą sieć uczyć algorytmicznie a nie dobierać ręcznie wagi!

Sieć ma klasyfikować wejściowe ciągi na dwie kategorie -> literki z twojego imienia i inne znaki. Zestawem uczącym będzie więc zbiór literek z twojego imienia i dla niego sieć ma zwracać np. 1 oraz zbiór innych znaków ascii dla których sieć ma zwracać 0. Puszczać takie dane testowe na tysiące iteracji BP aż sie sieć nie nauczy i tyle.

0

Nie napisalem że rozumiem, umiem zaimplementować ten algorytm w wersji podanej w zalaczniku,

Puszczać takie dane testowe na tysiące iteracji BP aż sie sieć nie nauczy i tyle.
aż siec sie nauczy chyba.

2

Jak ktoś ze studenciaków ma problemy z implementacją sztucznej sieci neuronowej typu Multilayer Perceptron, to tu jest prosta implementacja w pythonie:

http://arctrix.com/nas/python/bpnn.py

I jak sądzę dość przejrzyście co do algorytmu back propagation.

Jedna warstwa ukryta która wystarczy do rozwiązania większości postawionych problemów, co jednak w tym przykładzie ważne, +1 wejście które jest tylko po to żeby było biasem. A po co ten bias jest to się łatwo przekonać jak na wejściu perceptronu jest zero a wyjście ma być jedynką a funkcja jest tangens hiperboliczny, więc powodzenia w treningu.

Tak można by sprawdzać dowolny znak w kodzie ASCII, tzn. 8 wejść przyjmujących wartości binarne 0 albo 1 no i jeszcze jedno wejście żeby był bias, choć w tym kodzie w pythonie jest to już dodane, więc nie jest konieczne. A liczba wyjść to np. 2 albo 3, które wypluwają wartości binarne, tak żeby na ich podstawie określić czy to co na wejściu jest literą, cyfrą, znakiem sterującym czy jakimś innym kodem ASCII.

Co do liczby neuronów w warstwie ukrytej, z tego co czytałem na stacku, nie więcej niż 2x neuronów w warstwie wejściowej, czyli jak jest 8 + 1 dla biasu to by wychodziło nie więcej niż 18. Trzeba by to przetestować na tym skrypcie pythona.

A i jeszcze bym zapomniał o sprawdzeniu zdolności generalizacji, czyli testu na wartościach które nie są w zbiorze do treningu, też należałoby sprawdzić.

0

Jakby ktoś chciał ładna sieć w pythonie (nawet z GUI!) to https://github.com/Pharisaeus/Neural ;)

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