Table of Contents[Veşartin][Rêdan]
Mêjî bi torên neuralî re hevber e. Ev analojiya ku bi gelemperî tê bikar anîn da ku ji kesê nû yê mijarê re bibe alîkar da ku ramanên li pişt fêrbûna makîneyê û torên neuralî yên çêkirî fam bike.
Ji ber ku li pişt perdeyê çend qatên hesabên matematîkî û îstatîstîkî hene, pênasekirina van toran wekî fonksiyonek matematîkî rêbazek pêşkeftîtir e.
Ev ji bo kesên ku bi rastî bi fêrbûna makîneyê re eleqedar in û dixwazin bibînin ka koda tora neuralî ya Python çawa tê nivîsandin.
Di vê gotarê de, em ê destnîşan bikin ka meriv çawa torgilokek neuralî ya kûr a bi tevahî girêdayî (DNN) ji nû ve tê çêkirin. python 3.
Nêrînek li ser Struktura Pelê ji bo Koda meya Tora Neuralî ya Python
Li vir dê sê pel bêne çêkirin. Ya yekem pela nn.py ya hêsan e, ku dê di "Sazkirina Fonksiyonên Alîkariyê" û "Avakirina Tora Neuralî ji Serûpê de" were nîqaş kirin.
Em ê di heman demê de pelek bi navê mnist loader.py jî hebin da ku daneyên ceribandinê bar bikin, wekî ku di "Daneyên MNIST Barkirina" de hatî destnîşan kirin.
Di dawiyê de, me dê pelek bi navê test.py hebe ku dê di termînalê de were destpêkirin da ku tora meya neuralî biceribîne.
Ev pel bi hûrgulî di "Testên diqewimin" de tête diyar kirin.
Lêkirinî
Ji bo şopandina vê tutoriyê divê pirtûkxaneya NumPy Python were dakêşandin. Hûn dikarin vê yekê bi karanîna fermana jêrîn li ser termînalê pêk bînin:
Importkirina Modulan û sazkirina fonksiyona Alîkar
Tenê du pirtûkxaneyên ku em hewce ne rasthatî û NumPy ne, ku em ê tavilê wan derxînin. Ji bo giraniyên destpêkê yên tora xweya neuralî, em ê wan bi karanîna pirtûkxaneya bêserûber bihejînin.
Ji bo ku em hesabên xwe bileztir bikin, em ê NumPy an np bikar bînin (li gorî peymanê, ew pir caran wekî np tê import kirin). Du fonksiyonên me yên alîkar dê piştî îthalata me bêne çêkirin. Du fonksiyonên sigmoîdê: yek û sigmoîdê serokwezîr.
Regresyona lojîstîk dê bi karanîna fonksiyona sigmoîdê daneyan dabeş bike, dema ku paşnav dê bi karanîna fonksiyona pêşîn a sigmoîdê delta an gradient hesab bike.
Çîna Torê Afirandina
Avakirina torgilokek neuralî ya bi tevahî ve girêdayî tenê armanca vê beşê ye. Dersa torê dê hemî fonksiyonên ku li dû têne vehewîne. Fonksiyon Object() { [koda xwemalî] } dê di destpêkê de di çîna tora me de were afirandin.
Yek arguman, mezinahî, ji hêla fonksiyona Object() { [koda xwemalî] } ve tê xwestin. Guherbara mezinahiyê berhevokek nirxên hejmarî ye ku hejmara girêkên têketinê yên ku di her qatek tora meya neuralî de hene temsîl dike.
Em di rêbaza __init__ xwe de çar taybetmendiyan destnîşan dikin. Guherbarên têketinê, mezinahî, bi rêzdarî ji bo danîna navnîşa mezinahiyên qatan û jimara qatan, qatên num têne bikar anîn.
Pêngava yekem ev e ku em bi rasthatinî pêşbaziyên destpêkê yên tora xwe li her qatek ku li dû qata têketinê dişopînin veqetînin.
Di dawiyê de, her girêdanek di navbera qatên ketin û derketinê de giraniyên xwe bi rengek rasthatî têne çêkirin. Np.Random.Randn() nimûneyeke bêserûber dide ku ji belavkirina normal ji bo kontekstê hatiye kişandin.
Fonksîyona Pêşveçûn Feed
Di tora neuralî de, agahdarî ji hêla fonksiyonê vekêşanê ve têne şandin. Yek arguman, a, ku vektora aktîvkirina heyî nîşan dide, dê ji hêla vê fonksiyonê ve were xwestin.
Vê fonksiyonê bi dubarekirina li ser hemî nerîtan û giraniyên di torê de çalakkirinan li her qatê texmîn dike. Bersiva ku tê dayîn pêşbîn e, ku çalakkirina qata paşîn e.
Mini-batch Gradient Descent
Hespê xebatê yê çîna Torê me Gradient Descent e. Di vê guhertoyê de, em daketina gradientê ya piçûk-hevî (stochastic), guhertoyek guhezbar a daketina gradient bikar tînin.
Ev destnîşan dike ku komek piçûk ji xalên daneyê dê ji bo nûvekirina modela me were bikar anîn. Çar argumanên pêwîst û yek vebijarkî ji vê rêbazê re derbas dibin. Çar guherbarên pêwîst berhevoka daneya perwerdehiyê, hejmara serdeman, mezinahiya mînî-hevokan, û rêjeya fêrbûnê (eta) ne.
Daneyên testê li ser daxwazê hene. Dema ku em di dawiyê de vê torê binirxînin, em ê daneyên ceribandinê peyda bikin. Hejmara nimûneyên di vê fonksiyonê de gava ku daneyên perwerdehiyê di celebek navnîşê de hate veguheztin di destpêkê de bi dirêjahiya navnîşê tête danîn.
Em heman pêvajoyê ji bo ceribandina daneyên ku tê de têne dayîn jî bicîh dikin. Ev ji ber ku li şûna ku wekî navnîşan ji me re werin vegerandin, ew bi rastî zipên navnîşan in. Dema ku em paşê nimûneyên daneyên MNIST-ê bar dikin, em ê li ser vê yekê bêtir fêr bibin.
Ger em karibin pê ewle bin ku em her du celeb daneyan wekî navnîşan peyda dikin, wê hingê ev celeb-avêtin ne hewce ye ku pêdivî ye.
Dema ku daneyên me hene, em di nav çerxekê de derbasî serdemên perwerdehiyê dibin. Serdemek perwerdehiyê tenê yek dewreyek perwerdehiya tora neuralî ye. Em pêşî di her serdemê de daneyan dişoxilînin da ku bêserûberiyê berî ku navnîşek piçûk-hevî çêbikin.
Fonksiyona nûvekirina mini-heviyê, ku li jêr tê nîqaş kirin, dê ji bo her mini-hevokê were gazî kirin. Ger daneyên testê hebe dê rastbûna testê jî were vegerandin.
Fonksiyona alîkarê lêçûn-derivative
Berî ku em bi rastî koda paşîn-propagasyonê biafirînin, bila pêşî fonksiyonek arîkar bi navê lêçûnek lêçûn pêşve bibin. Ger em di qata derana xwe de xeletiyek bikin, dê fonksiyona lêçûnek lêçûn nîşan bide.
Ew du têketinan hewce dike: rêzika çalakkirina derketinê û hevrêzên y yên nirxên derketinê yên pêşbînîkirî.
Fonksiyona paşnavkirinê
Vektora aktîvkirina meya heyî, aktîvkirin, û her weha vektorên din ên çalakkirinê, çalakkirin, û z-vektorên me, zs, divê hemî li ber çavan bin. Pêşî qatek bi navê qata têketinê tê aktîfkirin.
Piştî danîna wan, em ê li ser her berteng û giraniyê bigerin. Her lûkk tê de hesabkirina vektora z wekî hilbera xalî ya giranan û aktîvkirinê, lê zêdekirina wê li navnîşa zs, ji nû ve hesabkirina aktîvkirinê, û lê zêdekirina aktîvkirina nûvekirî li navnîşa aktîvkirinê ye.
Di dawiyê de, matematîkê. Deltaya ku bi xeletiya qata berê ya ku bi sigmoîda yekem a hêmana paşîn a vektorên zs-ê hatiye zêdekirin wekhev e, berî ku em dest bi derbasbûna xweya paşverû bikin, tê hesibandin.
Tebeqeya paşîn a nabla b wekî delta, û qata dawîn a nabla w tê destnîşan kirin ku hilbera xalê ya deltayê û qata duyemîn-paşîn a çalakkirinê ye (veguheztin da ku em bi rastî matematîkê bikin) .
Em wekî berê dimeşin, ji qata duyemîn dest pê dikin û bi ya paşîn diqedînin, û piştî qedandina van qatên paşîn pêvajoyê dubare dikin. Dûv re nabla wekî kulmek tê dayîn.
Nûvekirina daketina gradientê ya Mini-hevî
Rêbaza meya SGD (hilweşîna gradientê ya stochastîk) ji berê ve nûvekirina mini-hevalê vedihewîne. Ji ber ku ew di SGD-ê de tê bikar anîn lê di heman demê de piştgir jî hewce dike, min nîqaş kir ku ez vê fonksiyonê li ku bikim.
Di dawiyê de, min hilbijart ku ez wê li vir biweşînim. Ew bi çêkirina 0 vektorên nablasên biyas û giranan dest pê dike, mîna ku fonksiyona meya paşnavê kir.
Ew wekî du têketinên xwe mini-batch û rêjeya fêrbûna eta hewce dike. Di mini-hevokê de, em dûv re fonksiyona paşpergalê bikar tînin da ku deltaya her rêzika nabla ji bo her têketinê, x, û derketinê, y, bistînin. Dûv re navnîşên nabla bi van deltayan têne nûve kirin.
Di dawiyê de, em rêjeya fêrbûnê û nablas bikar tînin da ku giranî û pêşbaziyên torê nûve bikin. Her nirx bi nirxa herî dawîn, kêmtir rêjeya fêrbûnê, bi mezinahiya piçûktir tê zêdekirin, û dûv re li nirxa nabla tê zêdekirin.
Fonksiyonê binirxînin
Fonksiyona nirxandinê ya dawîn e ku divê em binivîsin. Daneyên testê ji bo vê fonksiyonê tenê têketinê ye. Di vê fonksiyonê de, em tenê encamên torê bi encama pêşbînîkirî, y, didin ber hev. Bi xwarina têketinê, x, pêş ve, derketinên torê têne destnîşankirin.
Koda Temam
Dema ku em hemî kodê li hev dikin, bi vî rengî xuya dike.
Testkirina Tora Neuralî
Daneyên MNIST tê barkirin
Ew Daneyên MNIST di formata .pkl.gz de ye, ku em ê bi karanîna GZIP-ê vekin û bi pickle bar bikin. Werin em rêbazek bilez binivîsin da ku vê daneyê wekî jimareyek sê-sêyan bar bike, li ser perwerde, pejirandin, û daneyên ceribandinê hatî dabeş kirin.
Ji bo birêvebirina daneyên me hêsantir bikin, em ê fonksiyonek din binivîsin da ku y-yê di nav rêzek 10-bendî de şîfre bike. Rêze dê hemî 0 be ji bilî 1-ya ku bi reqema rast a wêneyê re têkildar e.
Em ê daneya barkirinê ya bingehîn û rêbazek şîfrekirina germ bikar bînin da ku daneyên xwe di formatek xwendinê de bar bikin. Dê fonksiyonek din were nivîsandin ku dê nirxên me yên x veguherîne navnîşek mezinahiya 784, ku bi 784 pîxelên wêneyê re têkildar be, û nirxên me yên y di forma vektora şîfrekirî ya yekane ya wan de.
Dûv re em ê nirxên x û y bi hev re bikin ku yek index bi ya din re têkildar be. Ev ji bo berhevokên daneyên perwerdehiyê, verastkirin û ceribandinê derbas dibe. Dûv re em daneyên guhertî vedigerînin.
Testên Dimeşin
Em ê pelek nû ya bi navê "mnist loader" çêbikin ku dê hem tora neuralî ya ku me berê ava kiriye (nn sade) hem jî barkera daneya MNIST berî ku em dest bi ceribandinê bikin.
Di vê pelê de, ya ku divê em bikin ev e ku daneyan derxînin, torgilokek bi mezinahiya qata têketinê 784 û mezinahiya qata derketinê ya 10 ava bikin, fonksiyona SGD ya torê li ser daneyên perwerdehiyê bimeşînin, dûv re wê bi karanîna daneyên ceribandinê ceribandin.
Bînin bîra xwe ku ji bo navnîşa meya qatên têketinê, ferq nake ku yek ji wan hejmaran di navbera 784 û 10-an de çi ne. Em dikarin qatên din bi her awayî biguherînin; tenê mezinahiyên ketin û derketinê têne rast kirin.
Sê qat ne hewce ne; dibe ku em çar, pênc, an jî tenê du bikar bînin. Bi ceribandina kêfê re.
Xelasî
Li vir, bi karanîna Python 3, em ji nû ve tora neuralî diafirînin. Li gel matematîka asta bilind, me li ser taybetiyên pêkanînê jî nîqaş kir.
Me bi pêkanîna fonksiyonên alîkar dest pê kir. Ji bo ku neuron bixebitin, fonksiyonên sereke yên sigmoîd û sigmoîd pir girîng in. Dûv re em fonksiyona pêşbirkê, ku pêvajoya bingehîn e ji bo gihandina daneyan di nav tora neuralî de, di pratîkê de dikin.
Dûv re, me fonksiyona daketina gradientê li Python, motora ku tora meya neuralî dimeşîne, çêkir. Ji bo ku em "kêmtirînên herêmî" bi cih bikin û giranî û nerîtên wan xweşbîn bikin, tora meya neuralî daketina gradient bikar tîne. Me fonksiyona paşnavkirinê bi kar afirand daketina gradient.
Bi gihandina nûvekirinan dema ku derketin bi etîketên rast re hevûdu nakin, ev fonksiyon dihêle tora neuralî "hîn bibe".
Di dawiyê de, me Python-a-ya xweya nû danîn torê neural ji bo ceribandinê bi karanîna daneyên MNIST bikar bînin. Her tişt bi rêkûpêk xebitî.
Kodkirina we pîroz be!
Leave a Reply