Orodha ya Yaliyomo[Ficha][Onyesha]
Ubongo unalinganishwa na mitandao ya neva. Huu ni mlinganisho ambao kwa kawaida hutumiwa kumsaidia mtu mpya kwa mada kuelewa mawazo ya kujifunza kwa mashine na mitandao ya neva bandia.
Kwa sababu kuna tabaka kadhaa za hesabu za hisabati na takwimu zinazoendelea nyuma ya pazia, kufafanua mitandao hii kama kipengele cha kihesabu ni njia ya juu zaidi.
Hii ni kwa watu ambao kwa kweli wanavutiwa na ujifunzaji wa mashine na wanataka kuona jinsi msimbo wa mtandao wa neural wa Python umeandikwa.
Katika nakala hii, tutaonyesha jinsi ya kuunda mtandao wa kina wa neva (DNN) kutoka mwanzo hadi mwisho. Chatu 3.
Muhtasari wa Muundo wa Faili kwa Msimbo wetu wa Mtandao wa Neural wa Python
Kutakuwa na faili tatu zitaundwa hapa. Ya kwanza ni faili rahisi ya nn.py, ambayo itajadiliwa katika "Kuweka Kazi za Msaidizi" na "Kuunda Mtandao wa Neural kutoka Mwanzo."
Pia tutakuwa na faili inayoitwa mnist loader.py ili kupakia data ya jaribio, kama ilivyoelezwa katika "Kupakia Data ya MNIST."
Mwishowe, tutakuwa na faili inayoitwa test.py ambayo itazinduliwa kwenye terminal ili kujaribu mtandao wetu wa neva.
Faili hii imeelezewa kwa kina katika "Majaribio ya Kuendesha."
ufungaji
Maktaba ya NumPy Python lazima ipakuliwe ili kufuata mafunzo haya. Unaweza kukamilisha hili kwa kutumia amri ifuatayo kwenye terminal:
Kuingiza Moduli na kusanidi kitendakazi cha Msaidizi
Maktaba mbili pekee tunazohitaji ni nasibu na NumPy, ambazo tutaagiza mara moja. Kwa uzani wa awali wa mtandao wetu wa neva, tutachanganya kwa kutumia maktaba nasibu.
Ili kuharakisha hesabu zetu, tutatumia NumPy au np (kwa makusanyiko, mara nyingi huingizwa kama np). Kazi zetu mbili za msaidizi zitafanywa baada ya uagizaji wetu. Kazi mbili za sigmoid: moja na sigmoid prime.
Urejeshaji wa kumbukumbu utaainisha data kwa kutumia chaguo za kukokotoa za sigmoid, huku uenezaji nyuma utakokotoa delta au upinde rangi kwa kutumia kitendakazi kikuu cha sigmoid.
Kuunda Daraja la Mtandao
Kuunda mtandao wa neva uliounganishwa kikamilifu ndio lengo pekee la sehemu hii. Darasa la mtandao litajumuisha kazi zote zinazofuata. Chaguo za kukokotoa Object() { [native code] } itaundwa mwanzoni katika darasa letu la mtandao.
Hoja moja, saizi, inahitajika na chaguo la kukokotoa Object() {[native code] }. Tofauti za ukubwa ni mkusanyiko wa thamani za nambari zinazowakilisha idadi ya nodi za ingizo zilizopo katika kila safu ya mtandao wetu wa neva.
Tunaanzisha sifa nne katika mbinu yetu __init__. Vigezo vya pembejeo, ukubwa, hutumiwa kuweka orodha ya ukubwa wa safu na idadi ya tabaka, tabaka za num, kwa mtiririko huo.
Hatua ya kwanza ni kugawa kwa nasibu upendeleo wa awali wa mtandao wetu kwa kila safu inayofuata safu ya ingizo.
Mwishowe, kila kiunga kati ya tabaka za pembejeo na pato kina uzani wake unaozalishwa kwa nasibu. Np.Random.Randn() inatoa sampuli nasibu iliyotolewa kutoka kwa usambazaji wa kawaida wa muktadha.
Kazi ya Kusambaza Mbele
Katika mtandao wa neva, habari hutumwa mbele na kitendakazi cha usambazaji. Hoja moja, a, inayoonyesha vekta ya uanzishaji ya sasa, itahitajika na kazi hii.
Chaguo hili la kukokotoa linakadiria kuwezesha kila safu kwa kurudia upendeleo na uzani wote kwenye mtandao. Jibu lililotolewa ni utabiri, ambao ni uanzishaji wa safu ya mwisho.
Kushuka kwa Gradient kwa bechi ndogo
Farasi wa darasa letu la Mtandao ni Gradient Descent. Katika toleo hili, tunatumia mteremko mdogo wa bechi (stochastic), tofauti iliyorekebishwa ya kushuka kwa upinde rangi.
Hii inaonyesha kuwa kundi dogo la vidokezo vya data litatumika kusasisha muundo wetu. Nne zinazohitajika na hoja moja ya hiari hupitishwa kwa njia hii. Vigezo vinne vinavyohitajika ni seti ya data ya mafunzo, idadi ya nyakati, saizi ya beti ndogo, na kiwango cha kujifunza (eta).
Data ya majaribio inapatikana kwa ombi. Tutatoa data ya majaribio tutakapotathmini mtandao huu hatimaye. Idadi ya sampuli katika chaguo za kukokotoa huwekwa kwa urefu wa orodha mara tu data ya mafunzo inapobadilishwa kuwa aina ya orodha.
Pia tunatumia mchakato ule ule ili kujaribu data ambayo imetolewa. Hii ni kwa sababu badala ya kurejeshwa kwetu kama orodha, kwa kweli ni zip za orodha. Tunapopakia sampuli za data za MNIST baadaye, tutajifunza zaidi kuhusu hili.
Ikiwa tunaweza kuhakikisha kuwa tunatoa aina zote mbili za data kama orodha, basi aina hii ya utumaji si lazima iwe muhimu.
Mara tu tukiwa na data, tunapitia enzi za mafunzo kwa kitanzi. Kipindi cha mafunzo ni duru moja tu ya mafunzo ya mtandao wa neva. Kwanza tunachanganya data katika kila enzi ili kuhakikisha unasibu kabla ya kutengeneza orodha ya bechi ndogo.
Sasisho la kitendakazi la bechi dogo, ambalo limejadiliwa hapa chini, litaitwa kwa kila kundi-dogo. Usahihi wa jaribio pia utarejeshwa ikiwa data ya jaribio inapatikana.
Utendakazi wa usaidizi unaotokana na gharama
Hebu tutengeneze kitendakazi cha usaidizi kinachoitwa derivative ya gharama kwanza kabla ya kuunda msimbo wa uenezaji nyuma. Ikiwa tutafanya makosa katika safu yetu ya pato, chaguo la kukokotoa la gharama litaionyesha.
Inahitaji pembejeo mbili: safu ya kuwezesha pato na viwianishi vya y vya thamani zinazotarajiwa za matokeo.
Kitendaji cha uenezi nyuma
Vekta yetu ya sasa ya kuwezesha, kuwezesha, pamoja na vivekta vingine vyovyote vya kuwezesha, kuwezesha, na z-vekta, zs, vyote lazima vikumbukwe. Safu inayoitwa safu ya pembejeo inaamilishwa kwanza.
Tutapitia kila upendeleo na uzito baada ya kuziweka. Kila kitanzi kinahusisha kukokotoa z vekta kama bidhaa ya nukta ya uzani na kuwezesha, kuiongeza kwenye orodha ya zs, kukokotoa upya kuwezesha, na kuongeza uwezeshaji uliosasishwa kwenye orodha ya kuwezesha.
Hatimaye, hisabati. Delta, ambayo ni sawa na hitilafu kutoka kwa safu ya awali iliyozidishwa na sigmoid prime ya kipengele cha mwisho cha vekta za zs, inakokotolewa kabla ya kuanza kupita kwetu nyuma.
Safu ya mwisho ya nabla b imewekwa kuwa delta, na safu ya mwisho ya nabla w imewekwa kuwa bidhaa ya nukta ya delta na safu ya pili hadi ya mwisho ya kuwezesha (iliyobadilishwa ili tuweze kufanya hesabu) .
Tunaendelea kama hapo awali, kuanzia safu ya pili na kumalizia na ya mwisho, na kurudia mchakato baada ya kumaliza tabaka hizi za mwisho. Kisha nabla hurejeshwa kama nakala.
Inasasisha mteremko wa daraja la Mini-bechi
Mbinu yetu ya SGD (mteremko wa gradient stochastic) kutoka hapo awali inahusisha usasishaji wa bechi ndogo. Kwa kuwa inatumika katika SGD lakini pia inahitaji sehemu ya nyuma, nilijadili ni wapi pa kuweka kazi hii.
Hatimaye, nilifanya uchaguzi wa kuichapisha hapa. Huanza kwa kutoa vekta 0 za nablas za upendeleo na uzani, kama utendakazi wetu wa nyuma ulivyofanya.
Inahitaji bechi ndogo na kiwango cha kujifunza cha eta kama pembejeo zake mbili. Katika kundi-dogo, kisha tunatumia kitendakazi cha nyuma ili kupata delta ya kila safu ya nabla kwa kila ingizo, x, na pato, y. Orodha za nabla basi husasishwa na delta hizi.
Hatimaye, tunatumia kiwango cha kujifunza na nablas kusasisha uzito na upendeleo wa mtandao. Kila thamani inasasishwa hadi thamani ya hivi karibuni zaidi, chini ya kiwango cha kujifunza, ikizidishwa na saizi ndogo, na kisha kuongezwa kwa thamani ya nabla.
Tathmini utendakazi
Kazi ya kutathmini ndiyo ya mwisho tunayohitaji kuandika. Data ya jaribio ndiyo ingizo pekee la chaguo hili la kukokotoa. Katika chaguo hili la kukokotoa, tunalinganisha tu matokeo ya mtandao na matokeo yanayotarajiwa, y. Kwa kulisha pembejeo, x, mbele, matokeo ya mtandao yanatambuliwa.
Kamilisha Kanuni
Tunapochanganya msimbo wote, hivi ndivyo inavyoonekana.
Kujaribu Mtandao wa Neural
Inapakia data ya MNIST
The Data ya MNIST iko katika umbizo la .pkl.gz, ambalo tutafungua kwa kutumia GZIP na kupakia kachumbari. Hebu tuandike mbinu ya haraka ya kupakia data hii kama nakala ya ukubwa wa tatu, iliyogawanywa katika mafunzo, uthibitishaji, na data ya majaribio.
Ili kurahisisha data yetu kudhibiti, tutaandika chaguo jingine la kukokotoa ili kusimba y katika safu ya vipengee 10. Mkusanyiko utakuwa sekunde 0 isipokuwa 1 inayolingana na tarakimu sahihi ya picha.
Tutatumia data ya msingi ya upakiaji na mbinu moja motomoto ya kusimba ili kupakia data yetu katika umbizo linalosomeka. Chaguo jingine la kukokotoa litaandikwa ambalo litabadilisha thamani zetu za x kuwa orodha ya saizi 784, inayolingana na pikseli 784 za picha, na thamani zetu za y kuwa fomu yao moja ya vekta iliyosimbwa moto.
Kisha tutachanganya thamani za x na y ili faharasa moja ilingane na nyingine. Hii inatumika kwa mafunzo, uthibitishaji, na seti za data za majaribio. Kisha tunarudisha data iliyobadilishwa.
Kuendesha Mitihani
Tutatengeneza faili mpya inayoitwa "mnist loader" ambayo italeta mtandao wa neural tulioanzisha hapo awali (rahisi nn) na kipakiaji cha seti ya data ya MNIST kabla ya kuanza kujaribu.
Katika faili hii, tunachohitaji kufanya ni kuingiza data, kujenga mtandao na saizi ya safu ya ingizo ya 784 na safu ya pato ya 10, endesha kazi ya mtandao ya SGD kwenye data ya mafunzo, kisha uijaribu kwa kutumia data ya jaribio.
Kumbuka kwamba kwa orodha yetu ya safu za ingizo, haileti tofauti yoyote kati ya nambari ni kati ya 784 na 10. Tunaweza kubadilisha safu zingine kwa njia yoyote tunayopenda; saizi za pembejeo na pato tu zimewekwa.
Tabaka tatu sio lazima; tunaweza kutumia nne, tano, au hata mbili tu. Furahia kujaribu nayo.
Hitimisho
Hapa, kwa kutumia Python 3, tunaunda mtandao wa neural kutoka mwanzo. Pamoja na hesabu za kiwango cha juu, tulijadili pia maalum za utekelezaji.
Tulianza kwa kutekeleza kazi za msaidizi. Kwa niuroni kufanya kazi, utendakazi mkuu wa sigmoid na sigmoid ni muhimu. Kisha tunaweka katika vitendo utendakazi wa feedforward, ambao ni mchakato wa kimsingi wa kulisha data kwenye mtandao wa neva.
Kisha, tuliunda kazi ya mteremko wa gradient katika Python, injini inayoendesha mtandao wetu wa neva. Ili kupata "minima ya karibu" na kuboresha uzani na upendeleo wao, mtandao wetu wa neva hutumia mteremko wa gradient. Tuliunda kitendakazi cha uenezi kwa kutumia kushuka kwa gradient.
Kwa kutoa masasisho wakati matokeo hayalingani na lebo zinazofaa, chaguo hili la kukokotoa huwezesha mtandao wa neva "kujifunza."
Mwishowe, tunaweka Python yetu mpya neural mtandao kwa jaribio kwa kutumia seti ya data ya MNIST. Kila kitu kilifanya kazi vizuri.
Furaha ya Kuandika!
Acha Reply