Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
zdravím,
potřeboval bych pomoci s natrénováním neuronové sítě (nejlépe v interaktivním simulátoru neuronových sítí iSNS) tak, aby se naučila funkci sin(x) (kde x je v radiánech) v intervalu hodnot <-10,10> a pro testovací množinu pak dávala správný výstup, kde chyba aproximace je max 5 %. Neuronová síť by měla být typu Backpropagation.
Zkoušel jsem v simulátoru iSNS i funkci x^2/100 a zde byly výstupy testovací množiny v pořádku, ale pro funkci sin(x), se mi síť nedaří nastavit a naučit tak, aby dávala pro testovací množinu správné výstupy.
Pro trénovací množinu jsem použil tyto hodnoty:
-10 0.544
-9 -0.4121
-8 -0.9894
-7 -0.657
-6 0.2794
-5 0.9589
-4 0.7568
-3 -0.1411
-2 -0.9093
-1 -0.8415
0 0.0
1 0.8415
2 0.9093
3 0.1411
4 -0.7568
5 -0.9589
6 -0.2794
7 0.657
8 0.9894
9 0.4121
10 -0.544
jako testovací množinu pak volím 10 různých bodů z intervalu <-10,10>
zkoušel jsem různý počet neuronů a vrstev, avšak něco mi nejspíš uniká, po spuštění naučení se síť nedostane pod požadovanou chybu a výstupy jsou pro mne nesmyslné. Nejspíš někde při nastavování parametrů sítě dělám chybu( málo bodů v trénovací množině, špatný počet neuronů, vrstev, špatné nastavení jiných parametrů?) . Pokud by s tímto simulátorem měl někdo zkušenosti a mohl pomoci... (popř. byl bych rád i za vysvětlení v jiném SW pro NS typu Backtracking ).
případně stažení simulátoru neuronové sítě: http://sourceforge.net/projects/isns/
dokumentace: http://isns.sourceforge.net/
Offline
↑ meron:
nič rozumnejšie ma nenapadá, iba nakŕmiť tú neurónku jednou periódou funkcie sin(x) prípadne iba pol periódou. ty tam máš cca 3 a 1/4 periódy. nie som si istý ako sa softvér neurónovej siete vie vysporiadať s periodickými dátami. povedal by som, že kŕmením siete periodickými dátami sa do procesu zavádza nejednoznačnosť. toľko môj laický pohľad.
Offline
jo díky, k něčemu to asi bylo, zadal jsem tedy body jen v jedné periodě a síť se neučila s menší chybou a o něco rychleji a testovací množina v tomto intervalu <0, cca 6,28> dávala docela uspokojivé hodnoty, jenomže potřebuji natrénovat síť tak, dávala uspokojivé hodnoty pro množinu bodů z intervalu <-10, 10> jenže pokud zadám např. -10 tak už je chyba moc vysoká.
zkoušel jsem měnit některá nastavení v síti, zkoušel jsem i zvětšit počet bodů v trénovací množině, ale pořád to není ono. Dočetl jsem se v nějakých materiálech, že pro sin je nejlepší síť 1-3-1 , tak jsem zkoušel různá nastavení na této síti, přidávat něco málo neuronů nebo vrstev, ale ty výsledky testovací množiny se mi pořád nějak nezdají. Tak nevím, zda-li jsem vůbec zvolil vhodnou SW aplikaci k řešení, nebo něco dělám špatně.
Offline
↑ meron:
dosť asi bude záležať na samotnom sw, akým spôsobom implementuje neurónovú sieť. ja som (už dávnejšie) skúšal len tak cvične sw JustNN, kde som sa snažil zadať objekty, ktoré boli charakterizované veľmi veľkými 10^10 aj malými číslami <1. Nepochodil som, lebo tieto čísla nebolo ani možné zadať. Keď som zadal nejaké hraničné možné hodnoty, tak výsledky boli aj tak mimo. Z toho správania som pochopil, že teória neurónových sietí je jedna vec a ich implementácia zas iná.
V každom prípade na nete sú zdroje ktoré sa zaoberajú tvojím problémom. Napríklad tu sa píše, že potrebuješ minimálne 8 ale najlepšie až 16 bodov s rovnomerným rozostupom na 1 periódu. Ak máš Matlab, tak tu je aj kód pre neurónku. Neskúšal som to, lebo ja mám Octave miesto Matlabu a tam mi ten kód nefungoval. Ak to ale pôjde, tak si vieš porovnať výsledky toho tvojho sw s Matlabom.
Offline
matlab bohužel nemám, ale díky za odkazy, ledacos se z toho dá vyčíst. O tom rovnoměrném rozestupu jsem se zrovna včera taky dočetl na jiném odkazu, takže dneska jsem to celé odpoledne zkoušel nastavovat a nakonec se mi síť natrénovat s tolerovanou odchylkou podařilo.
Takže jsem přešel k dalšímu problému a ten se jeví jako ještě složitější, a to jak natrénovat , zkoušel jsem podobné postupy a nastavení jako u předchozích dvou funkcí, ovšem tady jsem zatím úplně bezradný, při pokusu o naučení sítě se zobrazuje hodně vysoká odchylka od trénovacích hodnot a vůbec se mi to nedaří srazit. opět by to mělo být pro hodnoty z intervalu <-10;10> ovšem pokud správně počítám, tak funkce nenabývá záporných čísel na x-ové souřadnici, takže jsem jako trénovací body zvolil hodnoty z intervalu od nuly výše.
Body jsem zkusil rozložit opět rovnoměrně, může být chyba v té trénovací množině?
přikládám obrázek , v prvním sloupci jsou vstupy trénovací množiny, ve druhém výstupy po naučení a ve třetím jsou výstupy množiny, které jsem chtěl naučit.
Offline
↑ meron:
2 moje postrehy:
- hodnoty stĺpca output sa pohybujú v intervale <-1;1>, čo predpokladám je samotné ohraničenie prenosovej (aktivačnej) funkcie v neurónovej sieti. pri sin(x) to nevadilo lebo sinus sa pohybuje v rovnakom intervale ako aktivačná funkcia.
- hodnoty stĺpca desired nezodpovedajú uvedenej funkcii log2(x)/4 a aj prekračujú interval <-1;1>, zatiaľ čo priebeh log2(x)/4 pre x=<0.2; 6.2> sa drží vo vnútri intervalu <-1;1>
Offline
ano, hodnoty log jsem úplně zapomněl vydělit 4kou, ráno jsem si toho pak taky všiml, takže za to se omlouvám, přenosová funkce skutečně byla původně nastavena na <-1,1>, což mi také uniklo, ale samozřejmě pokud hodnoty log vydělím 4kou, tak se to do tohoto intervalu vejde. takže problémy vyřešeny, díky za pomoc
Offline
Stránky: 1