» »

Problem - nevronske mreže

Problem - nevronske mreže

marko79 ::

Pozdravljeni,

sprašujem vas, če se je kdo že srečal s podobnim problemom in ali ima mogoče kakšne izkušnje,nasvet glede tega. Problem je sledeči...

Implementirajte večnivojski perceptron (dvonivojski, tj. z enim skritim nivojem).

Kot metodo učenja uporabite LR-P korekcijsko shemo za učeče avtomate.

Število uteži v mreži NW = N*(H+1)+H*(n+1), kjer je
N … število izhodnih nevronov
H … število skritih nevronov
n … število vhodnih nevronov
Pri tem so kot uteži všteti tudi pragovi  (po en na vsak nevron), ki so prav tako spremenljivi parametri.

Akcija i naj predstavlja spremembo +dW i-te uteži, akcija i+NW pa spremembo -dW i-te uteži v mreži. Tako je skupno število akcij 2NW. Izvedena akcija (sprememba uteži) je nagrajena, če se srednja kvadratna napaka (MSE) posledično zmanjša, in obratno. Ker se uspešnim spremembam uteži povečuje verjetnost, na ta način grobo aproksimiramo smer (lokalnega) negativnega gradienta napake. Spreminjanje smeri gradienta nam iz stališča učečih avtomatov predstavlja neke vrste spremenljivo okolje.

Nevronsko mrežo uporabite na problemu razpoznavanja znakov. Originalni vzorci znakov naj bodo naslednji:

··■■■■·· ···■■··· ··■■■■·· ··■■■■·· ·■■··■■·
·■■■■■■· ···■■··· ·■■■■■■· ·■■■■■■· ·■■··■■·
·■■··■■· ···■■··· ·····■■· ·····■■· ·■■··■■·
·■■··■■· ···■■··· ·····■■· ·····■■· ·■■■■■■·
·■■··■■· ···■■··· ··■■■■·· ···■■■■· ·■■■■■■·
·■■··■■· ···■■··· ·■■····· ·····■■· ·····■■·
·■■■■■■· ···■■··· ·■■····· ·····■■· ·····■■·
··■■■■·· ···■■··· ·■■■■■■· ·■■■■■·· ·····■■·

·■■■■■■· ··■■■■·· ·■■■■■■· ··■■■■·· ·■■■■■■·
·■■····· ·■■····· ·■■■■■■· ·■■··■■· ·■■··■■·
·■■····· ·■■····· ·····■■· ·■■··■■· ·■■··■■·
·■■■■■·· ·■■■■■·· ·····■■· ··■■■■·· ·■■■■■■·
··■■■■■· ·■■··■■· ····■■·· ·■■··■■· ····■■··
·····■■· ·■■··■■· ···■■··· ·■■··■■· ···■■···
·■■■■■■· ·■■··■■· ··■■···· ·■■··■■· ··■■····
··■■■■·· ··■■■■·· ·■■····· ··■■■■·· ·■■·····


Originalne vzorce zašumimo: vsako piko (“pixel”) spremenimo z verjetnostjo R (0%, 5%, 10%, 20%). Tako simuliramo realne vzorce. Učna množica naj vsebuje vsaj po 20 vzorcev vsakega razreda (skupno 200), testna pa vsaj po 100 (skupno 1000; pri velikem številu vzorcev namreč dobimo bolj verodostojne rezultate kot pri manjšem). Testni vzorci so generirani na isti način, vendar posebej.

Poiščite primerno spremembo uteži dW in primeren učni korak LR-P sheme a (b je pri LR-P shemi kar enak a). Program naj vam v pomoč izrisuje trenutne vrednosti uteži in trenutne verjetnosti akcij.

Opazujte (in beležite)
- potek napake pri učenju,
- klasifikacijsko točnost na učni množici,
- klasifikacijsko točnost na testni množici.

Raziščite različne dimenzije nevronskih mrež glede na število skritih nevronov (in s tem kompleksnost).

Narejeno je lahko v kateremkoli prog. jeziku.

Hvala in lp

Sc0ut ::

Nevronske mreže in princip delovanja poznaš?
1231 v3, Z97 A, 16GB ram 1600mhz, 3070 RTX, HX850

Sc0ut ::

V primeru da ne, si poglej:

- backpropagation
- delta rule
- sigmoid function
- tanh function

Povezava
1231 v3, Z97 A, 16GB ram 1600mhz, 3070 RTX, HX850

marko79 ::

poznam ja oz se ucim, vendar osnovne principe poznam...saj drugace ne bi niti vedel za kaj se gre...
link sem si na hitro ogledal, lepo opise vse kar si napisal in se vec...
vendar manjka ideja za resitev naloge...

Sc0ut ::

Jas sem se bolj spuščal v prilagajanje raznih krivulj, tako da mogoče da ne bom zadel prav. V glavnem, naloge bi se rešil takole.

Kot vidim imaš za vsako številko 8x8 pikslov, to je 64 vhodov, kar pomeni 64 vhodnih nevronov

Nato šifriraj:

· = 0
■ = 1

Nato še šifriraj:

0 = 000000001
1 = 100000010
2 = 010000100
3 = 001001000
4 = 000110000
..... In dalje

Recimo da se zgoraj uporabil 9 mest. Lahko jih daš tudi manj, manj je boljše. Vendar se mi ne da zdaj iskati najmanjšega števila, ki bi ponazoril vse. Vzamima hipotetično da jih je 9

Sedaj imaš torej mrežo, 64 vhodnih mest in 9 izhodnih. Vmes imaš poljubno, recimo 15 nevronsko skrito mrežo, pri kateri uporabljaš sigmoidno aktivacijsko funkcijo.

Zdaj pride učenje.

··■■■■··
·■■■■■■·
·■■··■■·
·■■··■■·
·■■··■■·
·■■··■■·
·■■■■■■·
··■■■■·· = 000000001

·■■■■■■·
·■■·····
·■■·····
·■■■■■··
··■■■■■·
·····■■·
·■■■■■■·
··■■■■·· = 000111000

Eno za drugo spuščaj skozi, dokler ne bodo uteži narihtane tako, da boš pri vsakem ustreznem vnosu inputa dobil ustrezno zaporedje 0 in 1, ki bodo kodirale specfično številko.

Več ne znam povedat, ker sem delal bolj s prilagajanjem krivulj, tak da me lahko tudi kdo popravi.
1231 v3, Z97 A, 16GB ram 1600mhz, 3070 RTX, HX850


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Kitajska pred javnostjo skriva dominacijo AI nad človekom zaradi Googla

Oddelek: Novice / Znanost in tehnologija
339688 (7328) 7982884e
»

Človeški jezik (strani: 1 2 )

Oddelek: Znanost in tehnologija
7317246 (13561) kuall
»

IBM razvil umetne nevrone

Oddelek: Novice / Znanost in tehnologija
2011769 (9388) antonija
»

Petkova predavanja v Hekovniku (Tehnološki park)

Oddelek: Novice / Ostalo
476080 (4077) Aasimar
»

Neural Networks

Oddelek: Znanost in tehnologija
106268 (5254) rasta

Več podobnih tem