Kaundan[Itago][Ipakita]
Ang utok ikatandi sa mga neural network. Kini ang analogy nga kasagarang gigamit aron matabangan ang usa ka bag-o sa hilisgutan nga masabtan ang mga ideya luyo sa pagkat-on sa makina ug mga artipisyal nga neural network.
Tungod kay adunay daghang mga lut-od sa matematika ug estadistika nga mga pagkalkula nga nagpadayon sa luyo sa mga talan-awon, ang paghubit niini nga mga network isip usa ka function sa matematika usa ka mas abante nga pamaagi.
Kini alang sa mga tawo nga interesado sa pagkat-on sa makina ug gusto nga makita kung giunsa gisulat ang code sa neural network sa Python.
Sa kini nga artikulo, ipakita namon kung giunsa paghimo ang usa ka hingpit nga konektado nga lawom nga neural network (DNN) gikan sa sinugdanan Python 3.
Usa ka Overview sa File Structure alang sa Atong Python Neural Network Code
Adunay tulo ka mga file nga gihimo dinhi. Ang una mao ang yano nga nn.py file, nga hisgutan sa "Pag-set up sa Mga Katabang sa Katabang" ug "Pagtukod sa Neural Network gikan sa Scratch."
Adunay usab kami usa ka file nga ginganlag mnist loader.py aron makarga ang datos sa pagsulay, ingon nga gihulagway sa "Pagkarga sa Data sa MNIST."
Sa katapusan, kita adunay usa ka file nga ginganlan test.py nga ilunsad sa terminal aron sa pagsulay sa atong neural network.
Kini nga file gihulagway sa detalye sa "Pagdagan nga mga Pagsulay."
Instalar
Ang librarya sa NumPy Python kinahanglan nga ma-download aron masunod kini nga panudlo. Mahimo nimo kini pinaagi sa paggamit sa mosunod nga sugo sa terminal:
Pag-import sa mga Module ug pag-set up sa function sa Helper
Ang duha ra nga librarya nga among gikinahanglan mao ang random ug NumPy, nga among i-import dayon. Alang sa mga inisyal nga gibug-aton sa among neural network, among i-shuffle kini gamit ang random library.
Aron mapadali ang atong mga kalkulasyon, atong gamiton ang NumPy o np (pinaagi sa kombensiyon, kasagaran kini gi-import isip np). Ang among duha ka mga function sa katabang himuon pagkahuman sa among pag-import. Duha ka sigmoid function: usa ug sigmoid prime.
Ang logistic regression magklasipikar sa datos gamit ang sigmoid function, samtang ang backpropagation magkalkula sa delta o gradient gamit ang sigmoid prime function.
Paghimo sa Klase sa Network
Ang pagtukod og usa ka hingpit nga nalambigit nga neural network mao lamang ang pokus niini nga seksyon. Ang klase sa network maglangkob sa tanan nga mga gimbuhaton nga moabut pagkahuman. Ang function Object() { [native code] } pagabuhaton sa sinugdanan sa among network class.
Usa ka argumento, mga gidak-on, gikinahanglan sa function Object() { [native code] }. Ang variable nga gidak-on usa ka koleksyon sa mga numeric nga kantidad nga nagrepresentar sa gidaghanon sa mga input node nga naa sa matag layer sa among neural network.
Gisugdan namo ang upat ka mga kabtangan sa among __init__ nga pamaagi. Ang input variables, mga gidak-on, gigamit sa pagtakda sa listahan sa mga gidak-on sa layer ug ang gidaghanon sa mga layer, num layers, matag usa.
Ang unang lakang mao ang random nga pag-assign sa mga inisyal nga biases sa atong network sa matag layer nga nagsunod sa input layer.
Sa katapusan, ang matag link tali sa input ug output layer adunay mga gibug-aton nga random nga nahimo. Ang Np.Random.Randn() naghatag ug random sample nga gikuha gikan sa normal nga distribution para sa konteksto.
Feed Forward Function
Sa usa ka neural network, ang impormasyon gipadala sa unahan pinaagi sa function sa feedforward. Usa ka argumento, a, nga nagpaila sa kasamtangan nga activation vector, gikinahanglan niini nga function.
Kini nga function nagbanabana sa mga pagpaaktibo sa matag layer pinaagi sa pag-uli sa tanan nga mga bias ug gibug-aton sa network. Ang tubag nga gihatag mao ang panagna, nga mao ang pagpaaktibo sa katapusang layer.
Mini-batch nga Gradient Descent
Ang workhorse sa among klase sa Network mao ang Gradient Descent. Niini nga bersyon, migamit kami og mini-batch (stochastic) gradient descent, usa ka giusab nga variation sa gradient descent.
Kini nagpakita nga ang usa ka gamay nga hugpong sa mga punto sa datos gamiton sa pag-update sa among modelo. Upat ka gikinahanglan ug usa ka opsyonal nga argumento ang gipasa niini nga pamaagi. Ang upat ka gikinahanglan nga mga baryable mao ang training data set, ang gidaghanon sa mga panahon, ang gidak-on sa mini-batch, ug ang learning rate (eta).
Ang datos sa pagsulay magamit kung gihangyo. Maghatag kami ug datos sa pagsulay kung sa katapusan among susihon kini nga network. Ang gidaghanon sa mga sample niini nga function sa sinugdan gibutang sa gitas-on sa lista sa higayon nga ang data sa pagbansay mausab ngadto sa usa ka matang sa listahan.
Gi-apply usab namo ang parehas nga proseso sa pagsulay sa datos nga gihatag. Kini tungod kay imbes nga ibalik kanamo ingon mga lista, sila gyud mga zip sa mga lista. Kung atong i-load ang mga sampol sa datos sa MNIST sa ulahi, makakat-on pa kita bahin niini.
Kung masiguro namon nga among gihatag ang parehas nga mga klase sa datos ingon mga lista, nan kini nga tipo-casting dili kinahanglan nga kinahanglanon.
Kung naa na namon ang datos, gipadayon namon ang mga panahon sa pagbansay sa usa ka loop. Ang panahon sa pagbansay usa lamang ka hugna sa pagbansay sa neural network. Una namo nga gi-shuffle ang mga datos sa matag panahon aron masiguro ang pagka random sa dili pa maghimo og lista sa mga mini-batch.
Ang pag-update sa mini batch function, nga gihisgutan sa ubos, tawagan alang sa matag mini-batch. Ibalik usab ang katukma sa pagsulay kung magamit ang datos sa pagsulay.
Katabang nga function sa cost-derivative
Maghimo kita og usa ka function sa katabang nga gitawag nga cost derivative una sa dili pa kita makahimo sa backpropagation code. Kung masayop kita sa atong output layer, ang cost derivative function magpakita niini.
Nagkinahanglan kini og duha ka input: ang output activations array ug ang y-coordinates sa gipaabot nga output values.
Backpropagation function
Ang atong presente nga activation vector, activation, ingon man ang bisan unsang uban nga activation vectors, activation, ug z-vectors, zs, kinahanglan tanan ibutang sa hunahuna. Usa ka layer nga gitawag nga input layer ang gi-aktibo una.
Atong susihon ang matag bias ug gibug-aton human kini ibutang. Ang matag loop naglakip sa pagkalkula sa z vector isip tuldok nga produkto sa mga gibug-aton ug sa pagpaaktibo, pagdugang niini sa listahan sa zs, pagkalkula pag-usab sa pagpaaktibo, ug pagdugang sa updated nga pagpaaktibo sa listahan sa mga pagpaaktibo.
Sa katapusan, ang matematika. Ang delta, nga katumbas sa sayup gikan sa miaging layer nga gipadaghan sa sigmoid prime sa katapusang elemento sa zs vectors, gikuwenta sa dili pa kita magsugod sa atong backward pass.
Ang katapusan nga layer sa nabla b gibutang nga delta, ug ang katapusan nga layer sa nabla w gitakda nga ang tuldok nga produkto sa delta ug ang ikaduha ngadto sa katapusan nga layer sa mga pagpaaktibo (gibalhin aron mahimo gyud nato ang matematika) .
Nagpadayon kami sama sa una, sugod sa ikaduha nga layer ug gitapos sa katapusan, ug gisubli ang proseso pagkahuman nakompleto ang katapusan nga mga layer. Ang nablas dayon ihatag balik isip tuple.
Pag-update sa Mini-batch gradient descent
Ang among SGD (stochastic gradient descent) nga pamaagi gikan sa wala pa naglakip sa mini-batch nga pag-update. Tungod kay gigamit kini sa SGD apan nanginahanglan usab og backprop, nagdebate ko kung asa ibutang kini nga function.
Sa katapusan, nakapili ko nga i-post kini dinhi. Nagsugod kini pinaagi sa paghimo og 0 nga mga vector sa mga bias ug mga gibug-aton nga nablas, sama sa gibuhat sa among backprop function.
Nagkinahanglan kini sa mini-batch ug ang rate sa pagkat-on sa eta isip duha ka input niini. Sa mini-batch, atong gamiton ang backprop function para makuha ang delta sa matag nabla array para sa matag input, x, ug output, y. Ang mga lista sa nabla kay gi-update sa kini nga mga delta.
Sa katapusan, gigamit namon ang rate sa pagkat-on ug ang nablas aron ma-update ang mga gibug-aton ug bias sa network. Ang matag bili gi-update sa pinakabag-o nga bili, mas ubos ang rate sa pagkat-on, gipadaghan sa minibatch nga gidak-on, ug unya gidugang sa nabla value.
Pagtimbang-timbang sa function
Ang function sa pagtimbang-timbang mao ang katapusan nga kinahanglan naton isulat. Ang data sa pagsulay mao lamang ang input alang niini nga function. Niini nga function, atong itandi lamang ang mga output sa network sa gipaabot nga resulta, y. Pinaagi sa pagpakaon sa input, x, sa unahan, ang mga output sa network matino.
Kompleto nga Code
Kung gihiusa namon ang tanan nga code, ingon kini kung giunsa kini makita.
Pagsulay sa Neural Network
Nagkarga sa datos sa MNIST
ang datos sa MNIST naa sa .pkl.gz nga format, nga atong ablihan gamit ang GZIP ug ikarga ug adobo. Magsulat kita og usa ka dali nga pamaagi sa pag-load niini nga datos isip usa ka tuple nga tulo ka gidak-on, gibahin ngadto sa pagbansay, validation, ug data sa pagsulay.
Aron mapasayon ang pagdumala sa among datos, magsulat kami og laing function aron ma-encode ang y ngadto sa 10-item array. Ang array kay 0s tanan gawas sa 1 nga mohaum sa tukma nga digit sa hulagway.
Gamiton namo ang batakang datos sa pagkarga ug usa ka paagi sa pag-encode sa init aron makarga ang among datos sa usa ka mabasa nga pormat. Laing function ang isulat nga mag-convert sa atong x values ngadto sa usa ka lista sa gidak-on nga 784, nga motakdo sa 784 pixels sa hulagway, ug ang atong y values ngadto sa ilang single hot encoded vector form.
Dayon atong i-combine ang x ug y values aron ang usa ka index motakdo sa lain. Kini magamit sa pagbansay, pag-validate, ug mga set sa datos sa pagsulay. Atong ibalik ang nabag-o nga datos.
Pagdagan sa mga Pagsulay
Maghimo mi og bag-ong file nga gitawag og "mnist loader" nga mag-import sa neural network nga among gitukod kaniadto (simple nn) ug ang MNIST data set loader sa dili pa kami magsugod sa pagsulay.
Niini nga file, ang kinahanglan lang natong buhaton mao ang pag-import sa datos, paghimo og network nga adunay input layer nga gidak-on nga 784 ug usa ka output layer nga gidak-on nga 10, ipadagan ang SGD function sa network sa data sa pagbansay, unya sulayan kini gamit ang data sa pagsulay.
Hinumdumi nga alang sa among lista sa mga layer sa input, wala’y kalainan kung unsa ang bisan unsang mga numero tali sa 784 ug 10. Mahimo naton usbon ang ubang mga layer sa bisan unsang paagi nga gusto namon; ang mga gidak-on sa input ug output ang gitakda.
Tulo ka mga sapaw dili kinahanglan; mahimo natong gamiton ang upat, lima, o bisan duha lang. Paglingaw sa pag-eksperimento niini.
Panapos
Dinhi, gamit ang Python 3, naghimo kami usa ka neural network gikan sa wala. Uban sa taas nga lebel sa matematika, among gihisgutan ang mga detalye sa pagpatuman.
Nagsugod kami pinaagi sa pagpatuman sa mga gimbuhaton sa katabang. Aron molihok ang mga neuron, hinungdanon ang sigmoid ug sigmoid prime function. Gipraktis namon dayon ang function sa feedforward, nga mao ang sukaranan nga proseso sa pagpakaon sa datos sa neural network.
Sunod, among gibuhat ang gradient descent function sa Python, ang makina nga nagmaneho sa among neural network. Aron makit-an ang "lokal nga minimum" ug ma-optimize ang ilang mga gibug-aton ug mga bias, ang among neural network naggamit sa gradient nga pagkunsad. Gihimo namo ang backpropagation function gamit ang gradient nga pagkanaog.
Pinaagi sa paghatud sa mga update kung ang mga output dili motakdo sa husto nga mga label, kini nga function makahimo sa neural network nga "makat-on."
Sa katapusan, among gibutang ang among bag-ong Python neural network sa pagsulay gamit ang MNIST data set. Ang tanan milihok nga hapsay.
Malipayon nga Coding!
Leave sa usa ka Reply