Clàr-innse[Falaich][Seall]
Tha an eanchainn an coimeas ri lìonraidhean neural. Is e seo an samhlachas a thathas a’ cleachdadh gu h-àbhaisteach gus cuideigin a tha ùr don chuspair a chuideachadh gus na beachdan air cùl ionnsachadh innealan agus lìonraidhean neural fuadain a thuigsinn.
Leis gu bheil grunn shreathan de àireamhachadh matamataigeach agus staitistigeil a’ dol air cùl na seallaidhean, tha a bhith a’ mìneachadh nan lìonraidhean sin mar ghnìomh matamataigeach na dhòigh nas adhartaiche.
Tha seo airson nan daoine aig a bheil ùidh ann an ionnsachadh innealan agus a tha airson faicinn mar a tha còd lìonra neoral Python air a sgrìobhadh.
San artaigil seo, seallaidh sinn mar a thogas tu lìonra neural domhainn làn-cheangailte (DNN) bhon fhìor thoiseach Python 3.
Sealladh farsaing air an structar faidhle airson ar Còd Lìonra Neural Python
Bidh trì faidhlichean air an cruthachadh an seo. Is e a’ chiad fhear am faidhle nn.py sìmplidh, a thèid a dheasbad ann an “Setting Up Helper Functions” agus “Togail an Neural Network from Scratch.”
Bidh faidhle againn cuideachd leis an t-ainm mnist loader.py gus an dàta deuchainn a luchdachadh, mar a chaidh a mhìneachadh ann an “A’ luchdachadh dàta MNIST. ”
Mu dheireadh, bidh faidhle againn leis an t-ainm test.py a thèid a chuir air bhog anns a’ phort-adhair gus ar lìonra neural a dhearbhadh.
Tha am faidhle seo air a mhìneachadh gu mionaideach ann an “Runing Tests.”
stàladh
Feumar leabharlann NumPy Python a luchdachadh sìos gus an oideachadh seo a leantainn. Faodaidh tu seo a choileanadh le bhith a’ cleachdadh an àithne a leanas air a’ chrìoch:
A’ toirt a-steach mhodalan agus a’ stèidheachadh gnìomh Helper
Is e an aon dà leabharlann a tha a dhìth oirnn air thuaiream agus NumPy, a bheir sinn a-steach sa bhad. Airson ciad cuideaman an lìonra neural againn, atharraichidh sinn iad a’ cleachdadh an leabharlann air thuaiream.
Gus ar àireamhachadh a luathachadh, cleachdaidh sinn NumPy no np (a rèir gnàthasan, bidh e gu tric air a thoirt a-steach mar np). Thèid an dà ghnìomh cuideachaidh againn a dhèanamh às deidh ar in-mhalairt. Dà ghnìomh sigmoid: aon agus prìomh sigmoid.
Bidh ath-thilleadh loidsigeach a’ seòrsachadh dàta a’ cleachdadh a’ ghnìomh sigmoid, fhad ‘s a bhios cùl-raon a’ tomhas an delta no an caisead a’ cleachdadh prìomh ghnìomh sigmoid.
A ' cruthachadh lìonra clasaichean
Is e togail lìonra neural làn-cheangailte an aon fhòcas san roinn seo. Gabhaidh an clas lìonra a-steach a h-uile gnìomh a thig às a dhèidh. Thèid an gnìomh Object() { [còd dùthchasach] } a chruthachadh an toiseach sa chlas lìonraidh againn.
Tha feum air aon argamaid, meudan, leis an obair Object() { [còd dùthchasach] }. Is e an caochladair meud cruinneachadh de luachan àireamhach a tha a’ riochdachadh na h-àireamh de nodan cuir a-steach a tha an làthair anns gach sreath den lìonra neural againn.
Bidh sinn a’ tòiseachadh ceithir feartan anns an dòigh __init__ againn. Tha na caochladairean cuir a-steach, meudan, air an cleachdadh gus an liosta de mheudan còmhdach agus an àireamh de shreathan, àireamh sreathan, fa leth a shuidheachadh.
Is e a’ chiad cheum a bhith a’ sònrachadh ciad-chlaonadh an lìonraidh againn air thuaiream do gach ìre a tha a’ leantainn an ìre cuir a-steach.
Mu dheireadh, tha cuideaman air gach ceangal eadar na sreathan cuir a-steach agus toraidh air a chruthachadh air thuaiream. Bheir Np.Random.Randn() sampall air thuaiream air a tharraing bhon sgaoileadh àbhaisteach airson co-theacsa.
Gnìomh Feed Forward
Ann an lìonra neural, thèid fiosrachadh a chuir air adhart leis a’ ghnìomh feedforward. Bidh feum air aon argamaid, a, a’ comharrachadh an vectar gnìomhachaidh gnàthach, leis a’ ghnìomh seo.
Bidh an gnìomh seo a’ dèanamh tuairmse air na gnìomhachdan aig gach ìre le bhith ag ath-aithris thairis air a h-uile claonadh agus cuideam san lìonra. Is e am freagairt a chaidh a thoirt seachad an ro-innse, is e sin gnìomhachd an t-sreath mu dheireadh.
Teàrnadh caisead beag-batch
Is e an t-each-obrach aig a’ chlas Lìonra againn Teàrnadh Gradient. Anns an dreach seo, bidh sinn a’ cleachdadh teàrnadh caisead meanbh-batch (stochastic), atharrachadh atharraichte air teàrnadh caisead.
Tha seo a’ nochdadh gun tèid baidse bheag de phuingean dàta a chleachdadh gus ar modail ùrachadh. Tha feum air ceithir agus aon argamaid roghnach air an toirt don dòigh seo. Is e na ceithir caochladairean a tha a dhìth an seata dàta trèanaidh, an àireamh de amannan, meud nam mion-batches, agus an ìre ionnsachaidh (eta).
Tha dàta deuchainn ri fhaighinn ma thèid iarraidh. Bheir sinn seachad dàta deuchainn nuair a nì sinn measadh air an lìonra seo mu dheireadh. Tha an àireamh de shamhlaichean sa ghnìomh seo air a shuidheachadh an toiseach gu fad an liosta aon uair ‘s gu bheil an dàta trèanaidh air a thionndadh gu seòrsa liosta.
Bidh sinn cuideachd a' cleachdadh an aon phròiseas airson dàta a dhearbhadh a tha air a thoirt a-steach. Tha seo air sgàth 's an àite a bhith air a thilleadh thugainn mar liostaichean, 's e fìor zips de liostaichean a th' annta. Nuair a luchdaicheas sinn na sampallan dàta MNIST nas fhaide air adhart, ionnsaichidh sinn barrachd mu dheidhinn seo.
Mas urrainn dhuinn dèanamh cinnteach gun toir sinn seachad an dà sheòrsa dàta mar liostaichean, chan eil an seòrsa tilgeadh seo riatanach gu riatanach.
Aon uair ‘s gu bheil an dàta againn, thèid sinn thairis air na h-amannan trèanaidh ann an lùb. Chan eil ann an ùine trèanaidh ach aon chuairt de thrèanadh lìonra neural. Bidh sinn an-toiseach a’ crathadh an dàta anns gach àm gus dèanamh cinnteach à tuaiream mus dèan sinn liosta de bhuilleagan beaga.
Thèid an gnìomh baidse ùrachaidh, a tha air a dheasbad gu h-ìosal, a ghairm airson gach baidse beag. Thèid cruinneas na deuchainn a thilleadh cuideachd ma tha an dàta deuchainn ri fhaighinn.
Gnìomh neach-cuideachaidh cosgais-toraidh
Leasaichidh sinn gnìomh cuideachaidh ris an canar derivative cosgais an toiseach mus cruthaich sinn an còd cùl-taic. Ma nì sinn mearachd anns an ìre toraidh againn, seallaidh gnìomh toraidh cosgais e.
Feumaidh e dà chur-a-steach: an raon gnìomhachd toraidh agus na co-chomharran y de na luachan toraidh ris a bheil dùil.
Gnìomh backpropagation
Feumar an vectar gnìomhachaidh gnàthach againn, gnìomhachd, a bharrachd air vectaran gnìomhachaidh sam bith eile, gnìomhachd, agus z-vectors, zs, uile a chumail nad inntinn. Tha còmhdach ris an canar an còmhdach cuir a-steach air a chuir an gnìomh an toiseach.
Bidh sinn a 'lùbadh tro gach claonadh agus cuideam an dèidh an cur suas. Tha gach lùb a’ toirt a-steach obrachadh a-mach an vectar z mar thoradh dot nan cuideaman agus an gnìomhachd, ga chur ris an liosta zs, ag ath-àireamhachadh a’ ghnìomhachadh, agus a’ cur an gnìomh ùraichte ris an liosta de ghnìomhachdan.
Mu dheireadh, am matamataigs. Tha an delta, a tha co-ionann ris a’ mhearachd bhon t-sreath roimhe air iomadachadh leis a’ phrìomh sigmoid den eileamaid mu dheireadh de na vectaran zs, air a thomhas mus tòisich sinn air ar pas air ais.
Thathas an dùil gur e an delta an sreath mu dheireadh de nabla b, agus tha an ìre mu dheireadh de nabla w gu bhith mar thoradh dot an delta agus an dàrna sreath mu dheireadh de ghnìomhachd (air a thionndadh gus an urrainn dhuinn am matamataigs a dhèanamh) .
Bidh sinn a 'dol air adhart mar a bha roimhe, a' tòiseachadh leis an dàrna sreath agus a 'crìochnachadh leis an fhear mu dheireadh, agus ath-aithris a dhèanamh air a' phròiseas an dèidh crìoch a chur air na sreathan mu dheireadh sin. Tha na nablas an uairsin air an toirt air ais mar thuple.
Ag ùrachadh teàrnadh caisead Mini-batch
Tha an dòigh SGD againn (teàrnadh caisead stochastic) bho roimhe a’ toirt a-steach ùrachadh mion-batch. Leis gu bheil e air a chleachdadh ann an SGD ach gu bheil feum air backprop cuideachd, rinn mi deasbad air càite an cuir mi an gnìomh seo.
Mu dheireadh, rinn mi an roghainn a phostadh an seo. Bidh e a’ tòiseachadh le bhith a’ gineadh 0 vectaran de nablas claon-bhreith agus cuideaman, dìreach mar a rinn ar gnìomh cùl-taic.
Feumaidh e am baidse beag agus an ìre ionnsachaidh eta mar an dà chuir a-steach aige. Anns a’ bhaidse bheag, bidh sinn an uairsin a’ cleachdadh a’ ghnìomh backprop gus delta gach sreath nabla fhaighinn airson gach cuir a-steach, x, agus toradh, y. Tha na liostaichean nabla an uairsin air an ùrachadh leis na deltas sin.
Mu dheireadh, bidh sinn a’ cleachdadh an ìre ionnsachaidh agus nablas gus cuideaman is claon-bhreith an lìonraidh ùrachadh. Tha gach luach air ùrachadh chun luach as ùire, nas lugha na an ìre ionnsachaidh, air iomadachadh le meud minibatch, agus an uairsin air a chur ris an luach nabla.
Dèan measadh air gnìomh
Is e an gnìomh luachaidh am fear mu dheireadh a dh'fheumas sinn a sgrìobhadh. Is e an dàta deuchainn an aon chuir a-steach airson a’ ghnìomh seo. Anns a’ ghnìomh seo, cha bhith sinn a’ dèanamh coimeas ach eadar toraidhean an lìonraidh agus an toradh ris a bheil dùil, y. Le bhith a’ biathadh an cuir a-steach, x, air adhart, thathas a’ dearbhadh toraidhean an lìonraidh.
Còd coileanta
Nuair a chuireas sinn an còd gu lèir còmhla, seo mar a nochdas e.
A 'dèanamh deuchainn air lìonra neural
A luchdadh a-nuas òran MNIST
Tha Dàta MNIST ann an cruth .pkl.gz, a dh'fhosglas sinn le GZIP agus a luchdachadh le picil. Sgrìobhamaid dòigh sgiobalta airson an dàta seo a luchdachadh mar thuple de mheud trì, air a roinn ann an trèanadh, dearbhadh, agus dàta deuchainn.
Gus an dàta againn a dhèanamh nas fhasa a riaghladh, sgrìobhaidh sinn gnìomh eile gus an y a chòdachadh ann an sreath de 10 nithean. Bidh an t-sreath uile 0s ach a-mhàin 1 a tha a rèir figear ceart an deilbh.
Cleachdaidh sinn an dàta luchdaidh bunaiteach agus aon dòigh còdachadh teth gus an dàta againn a luchdachadh gu cruth a ghabhas leughadh. Thèid gnìomh eile a sgrìobhadh a thionndaidheas na x luachan againn gu liosta de mheud 784, a’ maidseadh 784 piogsail san ìomhaigh, agus na luachan y againn a-steach don aon fhoirm vectar còdaichte teth aca.
An uairsin cuiridh sinn na luachan x agus y còmhla gus am bi aon chlàr-amais co-ionann ris an fhear eile. Tha seo a’ buntainn ri trèanadh, dearbhadh, agus seataichean dàta deuchainn. Bidh sinn an uairsin a’ tilleadh an dàta atharraichte.
Deuchainnean ruith
Nì sinn faidhle ùr leis an t-ainm “mnist loader” a bheir a-steach an dà chuid an lìonra neural a stèidhich sinn roimhe (nn sìmplidh) agus an luchdan seata dàta MNIST mus tòisich sinn air deuchainn.
Anns an fhaidhle seo, chan eil againn ach an dàta a thoirt a-steach, lìonra a thogail le meud còmhdach cuir a-steach de 784 agus meud còmhdach toraidh de 10, gnìomh SGD an lìonra a ruith air an dàta trèanaidh, agus an uairsin deuchainn a dhèanamh air a’ cleachdadh an dàta deuchainn.
Cumaibh cuimhne nach eil e gu diofar dè na h-àireamhan a tha eadar 784 agus 10 airson ar liosta de shreathan a-steach. Faodaidh sinn na sreathan eile atharrachadh dòigh sam bith a thogras sinn; chan eil ach na meudan cuir a-steach agus toraidh stèidhichte.
Chan eil feum air trì sreathan; is dòcha gun cleachd sinn ceithir, còig, no eadhon dìreach dhà. Faigh spòrs a’ feuchainn ris.
Co-dhùnadh
An seo, a’ cleachdadh Python 3, bidh sinn a’ cruthachadh lìonra neural bhon fhìor thoiseach. Còmhla ri matamataigs àrd-ìre, bheachdaich sinn cuideachd air mion-fhiosrachadh buileachaidh.
Thòisich sinn le bhith a’ cur an gnìomh gnìomhan cuideachaidh. Airson na neurons a bhith ag obair, tha na prìomh ghnìomhan sigmoid agus sigmoid deatamach. Bidh sinn an uairsin a’ cur an gnìomh gnìomh feedforward, a tha na phròiseas bunaiteach airson a bhith a’ biathadh dàta a-steach don lìonra neural.
An uairsin, chruthaich sinn an gnìomh teàrnadh caisead ann am Python, an einnsean a bhios a’ stiùireadh ar lìonra neural. Gus “minima ionadail” a lorg agus na cuideaman agus na claonaidhean aca a bharrachadh, bidh an lìonra neural againn a’ cleachdadh teàrnadh caisead. Chruthaich sinn an gnìomh backpropagation a’ cleachdadh sliochd caisead.
Le bhith a’ lìbhrigeadh ùrachaidhean nuair nach eil na toraidhean a’ freagairt ris na bileagan ceart, leigidh an gnìomh seo leis an lìonra neural “ionnsachadh.”
Mu dheireadh, chuir sinn am Python ùr-nodha againn lìon neònach chun deuchainn a’ cleachdadh an t-seata dàta MNIST. Dh’ obraich a h-uile dad gu rèidh.
Còdadh sona!
Leave a Reply