Uczenie sieci neuronowej

0

Witam, jestem nowy więc na początek chciałbym się przywitać ze wszystkimi forumowiczami. Teraz przedstawię problem. Otóż od pewnego czasu zajmuję się programowaniem sieci neuronowej. Zdecydowałem, że sieć będzie uczona bez nauczyciela. Jako metodę uczenia nienadzorowanego użyłem dobrze znanej metody Donalda Hebba. Wszystko jest prawie gotowe poza jedną rzeczą, mianowicie plikami uczącymi. Na pierwszy rzut oka problem wydaje się banalny i skoro doszedłem tak daleko, nie powinienem napotkać problemu. Niestety go napotkałem :( . Nie wiem jakich plików użyć, w jakich rozszerzeniach itp. Czy mają być to pliki zdjęciowe (.jpg) czy w formie binarnej o rozszerzeniu wykorzystywanym przez bibliotekę (używam Encog), czy pliki tekstowe (.txt) czy jakieś inne. A jeśli w formie binarnej to jak je wygenerować, przygotować, zaprogramować czy coś innego zrobić by takowy plik mi powstał. W miarę możliwości proszę o szybką pomoc. Przekopałem chyba cały internet i nic. Dziękuję za trud tkwiący w przeczytaniu mojego postu i za wszystkie przyszłe odpowiedzi.

PS. Dodam tylko że sieć i hebb są napisane w javie. Jak napisałem w złym dziale proszę mnie poprawić.

0

Nie do konca rozumiem. Co dokładnie chcesz by twoja sieć robiła? Bo od tego zależy jakie jej pliki wyślesz. Np. jakieś wyniki medyczne będą pewnie w pliku .txt

0

Chce aby sieć nauczyła się podstaw prostego języka skryptowego. I umieć tworzyć proste programy typu Hello World. Jaki plik wykorzystać?

4

To tak poważnie? o_O To zupełnie chybiony pomysł i dobrałeś metody które zwyczajnie sie tu nie nadają. Uczenie bez nadzoru służy do KLASYFIKACJI / grupowania danych o podobnych cechach. Nie da sie w ten sposób nauczyć sieci języka skryptowego w żaden sposób.
W sieci z nauczycielem można by ewentualnie próbować nauczyć sieć rozpoznawać kody poprawne i niepoprawne, ale wątpie żeby dawalo to jakieś sensowne wyniki.

Do zastosowania o którym mówisz nadają się za to takie rzeczy jak łańcuchy markowa i n-gramy. To się da zrobić i to nawet bez jakichś większych problemów. Idea jest taka że budujesz model statystyczny złożony z krotek o rozmiarze n (jakaś liczba). Każda krotka to występujące po sobie n kolejnych słów z twoich uczących kodów źródłowych. Zliczasz sobie dla każdej takiej kroki jak często występuje. Następnie możesz na wejściu podać pierwsze słowo swojego generowanego "programu" a potem dobierać najbardziej prawdopodobną krotkę dla tego słowa. Np. mamy sobie 3-gramy
[ala,ma,kota] -> wystąpiło 5 razy
[ma,kota,a] -> 2 razy
[kota,a,sierotka] -> 1 raz
[a,sierotka,ma] -> 1 raz
[sierotka,ma,rysia] -> 1 raz
[ma,rysia,cośtam] -> 1 raz

I teraz na wejście podajesz ala. Wyszukujesz krotki które zaczynaja się od ala i wybierasz taką która jest "najlepsza" czyli dla nas [ala,ma,kota]. Możesz teraz albo ładować całą krotkę, albo tylko pierwsze słowo a potem powtarzasz cały proces. Założmy że postanowiłeś generować bardziej "losowo" więc wybierasz tylko pierwsze słowo z najlepszej krotki. Mamy więc ala ma. Więc szukamy krotek zaczynających się od ma. Mamy takie dwie i wybieramy lepszą czyli [ma,kota,a]. Dodajemy kolejne słowo i mamy ala ma kota. I postępujemy tak aż wygenerujemy tyle ile chcemy albo braknie nam możliwości.

Nie uczyłem nigdy w ten sposób języka programowania, ale dla generowania słów (kiedy elementami krotek są litery) i dla generowania opowiadań (kiedy elementami są słowa) działało całkiem nieźle.

0

Czyli języka skryptowego można nauczyć tylko poprzez uczenie nadzorowane. Czy istnieje jakaś metoda uczenia nienadzorowanego która podołała by zadaniu?

0

@JavaMaster czy ty w ogóle masz jakiekolwiek pojęcie o tym o czym piszesz? Bo mam wrażenie że o sieciach neuronowych i uczeniu maszynowym to czytałeś tylko w Fakcie. Rozumiesz jak wygląda struktura sieci neuronowej? Co ma na wejściu i co ważniejsze co ma na wyjściu? Bo z twoich pytań wynika że nie wiesz.

Niemniej podałem ci właśnie przykład metody uczenia maszynowego BEZ nauczyciela która pozwala nauczyć pisania programów / słów / książek... Ale sieć neuronowa jako taka nie nadaje się w ogóle do takiego zadania.

0

Więc co się nadaje to tego zadania?

0

Czy ja piszę po rumuńsku albo niewyraźnie? Podałem ci wyżej przykład uczenia maszynowego opartego o łańcuchy markowa które idealnie nadaje się do twojego problemu. Co więcej napisałem ci nawet krok po kroku co należy zrobić. Mam to za ciebie zaimplementować czy jak? (co zresztą trudne nie jest bo to raptem kilka linijek ;])

2

Już perełka czy dajecie mu jeszcze trochę popisać?

0

Na pierwszy rzut oka problem wydaje się banalny i skoro doszedłem tak daleko, nie powinienem napotkać problemu. Niestety go napotkałem

0

Dzięki za wszystkie odpowiedzi.

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