Matematické Fórum

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

#1 12. 12. 2012 23:15

meron
Zelenáč
Příspěvky: 14
Reputace:   
 

natrénování neuronové sítě - aproximace funkce sin(x)

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

  • (téma jako vyřešené označil(a) meron)

#2 13. 12. 2012 11:21

etchie
Příspěvky: 159
Pozice: študent
Reputace:   
 

Re: natrénování neuronové sítě - aproximace funkce sin(x)

↑ 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

 

#3 14. 12. 2012 02:36 — Editoval meron (14. 12. 2012 02:44)

meron
Zelenáč
Příspěvky: 14
Reputace:   
 

Re: natrénování neuronové sítě - aproximace funkce sin(x)

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

 

#4 14. 12. 2012 20:58 — Editoval etchie (14. 12. 2012 21:02)

etchie
Příspěvky: 159
Pozice: študent
Reputace:   
 

Re: natrénování neuronové sítě - aproximace funkce sin(x)

↑ 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

 

#5 15. 12. 2012 00:59 — Editoval meron (15. 12. 2012 01:02)

meron
Zelenáč
Příspěvky: 14
Reputace:   
 

Re: natrénování neuronové sítě - aproximace funkce sin(x)

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 $(\log_{2}x) \not   4$, 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.

http://forum.matweb.cz/upload3/img/2012-12/29573_log.jpg

Offline

 

#6 15. 12. 2012 11:29

etchie
Příspěvky: 159
Pozice: študent
Reputace:   
 

Re: natrénování neuronové sítě - aproximace funkce sin(x)

↑ 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

 

#7 17. 12. 2012 02:18

meron
Zelenáč
Příspěvky: 14
Reputace:   
 

Re: natrénování neuronové sítě - aproximace funkce sin(x)

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

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson