Daptar eusi[Sumputkeun][Témbongkeun]
Otak tiasa dibandingkeun sareng jaringan saraf. Ieu mangrupikeun analogi anu biasana dianggo pikeun ngabantosan jalma anu énggal kana subjek pikeun ngartos ideu balik diajar mesin sareng jaringan saraf jieunan.
Kusabab aya sababaraha lapisan komputasi matematik sareng statistik anu lumangsung di tukangeun layar, netepkeun jaringan ieu salaku fungsi matematika mangrupikeun metode anu langkung maju.
Ieu kanggo jalma anu leres-leres resep diajar mesin sareng hoyong ningali kumaha kode jaringan saraf Python ditulis.
Dina tulisan ieu, urang bakal nunjukkeun kumaha cara ngawangun jaringan neural jero (DNN) anu disambungkeun pinuh ti mimiti Python 3.
Tinjauan Struktur File pikeun Kode Jaringan Neural Python Kami
Bakal aya tilu file anu didamel di dieu. Anu kahiji nyaéta file nn.py saderhana, anu bakal dibahas dina "Nyetél Fungsi Pembantu" sareng "Ngawangun Jaringan Neural tina Scratch."
Urang ogé bakal gaduh file anu namina mnist loader.py pikeun ngamuat data tés, sapertos anu dijelaskeun dina "Ngamuat Data MNIST."
Tungtungna, urang bakal ngagaduhan file anu namina test.py anu bakal diluncurkeun di terminal pikeun nguji jaringan saraf urang.
File ieu dijelaskeun sacara rinci dina "Ngajalankeun Tés."
parabot nu geus dipasang di tempatna sarta sadia dipake
Perpustakaan NumPy Python kedah diunduh supados tiasa nuturkeun tutorial ieu. Anjeun tiasa ngalengkepan ieu nganggo paréntah di handap ieu dina terminal:
Ngimpor Modul sareng nyetél fungsi Helper
Hiji-hijina dua perpustakaan anu kami butuhkeun nyaéta acak sareng NumPy, anu bakal kami impor langsung. Pikeun beurat awal jaringan saraf urang, urang bakal ngacak aranjeunna ngagunakeun perpustakaan acak.
Pikeun nyepetkeun komputasi, urang bakal nganggo NumPy atanapi np (ku konvénsi, éta sering diimpor salaku np). Dua fungsi pembantu urang bakal dilakukeun saatos impor urang. Dua fungsi sigmoid: hiji jeung sigmoid prima.
Regresi logistik bakal ngagolongkeun data ngagunakeun fungsi sigmoid, sedengkeun backpropagation bakal ngitung délta atawa gradién ngagunakeun fungsi prima sigmoid.
Nyiptakeun Kelas Jaringan
Ngawangun jaringan neural numbu pinuh mangrupikeun hiji-hijina fokus dina bagian ieu. Kelas jaringan bakal ngawengku sakabéh fungsi nu datang sanggeus. Fungsi Objék () { [kode asli] } bakal dijieun mimitina di kelas jaringan urang.
Hiji argumen, ukuran, diperlukeun ku fungsi Object() { [kode asli] }. Variabel ukuran mangrupikeun kumpulan nilai numerik anu ngagambarkeun jumlah titik input anu aya dina unggal lapisan jaringan saraf urang.
Urang initialize opat sipat dina metoda __init__ urang. Variabel input, ukuran, dianggo pikeun nyetél daptar ukuran lapisan sareng jumlah lapisan, num lapisan, masing-masing.
Léngkah munggaran nyaéta sacara acak nangtukeun bias awal jaringan urang ka unggal lapisan anu nuturkeun lapisan input.
Tungtungna, unggal link antara lapisan input jeung kaluaran boga beurat na dihasilkeun acak. Np.Random.Randn () méré sampel acak dicokot tina sebaran normal pikeun konteks.
Fungsi Maju Feed
Dina jaringan saraf, informasi dikirim ka hareup ku fungsi feedforward. Hiji argumen, a, nunjukkeun vektor aktivasina ayeuna, bakal diperlukeun ku fungsi ieu.
Pungsi ieu ngira-ngira aktivasina dina unggal lapisan ku iterasi kana sadaya bias sareng beurat dina jaringan. Jawaban anu dipasihkeun nyaéta prediksi, nyaéta aktivasina lapisan terakhir.
Mini-angkatan Gradién turunan
Workhorse kelas Network kami nyaéta Gradién Descent. Dina versi ieu, kami nganggo mini-angkatan (stokastik) turunan gradién, variasi dirobah tina turunan gradién.
Ieu nunjukkeun yén angkatan leutik titik data bakal dianggo pikeun ngapdet modél urang. Opat diperlukeun tur hiji argumen pilihan dibikeun ka metoda ieu. Opat variabel anu diperlukeun nyaéta set data latihan, jumlah epochs, ukuran mini bets, jeung laju diajar (eta).
Data tés sayogi upami dipénta. Kami bakal nyayogikeun data tés nalika ahirna meunteun jaringan ieu. Jumlah sampel dina fungsi ieu mimitina disetel ka panjang daptar sakali data latihan geus robah jadi tipe daptar.
Kami ogé nerapkeun prosés anu sami pikeun nguji data anu dipasihkeun. Ieu kusabab tinimbang dipulangkeun ka kami salaku daptar, aranjeunna leres-leres zip tina daptar. Nalika urang ngamuat conto data MNIST engké, urang bakal diajar langkung seueur ngeunaan ieu.
Upami urang tiasa mastikeun yén kami nyayogikeun duanana jinis data salaku daptar, maka jinis-casting ieu henteu penting pisan.
Sakali kami boga data, urang balik ngaliwatan epochs latihan di loop a. Mangsa latihan ngan ukur hiji babak pelatihan jaringan saraf. Urang mimiti ngacak data dina unggal epoch pikeun mastikeun randomness saméméh nyieun daptar mini bets.
Fungsi bets mini update, nu dibahas dihandap, bakal disebut pikeun tiap mini bets. Akurasi tés ogé bakal dipulangkeun upami data tés sayogi.
Fungsi pembantu turunan biaya
Hayu urang ngamekarkeun fungsi helper disebut turunan biaya sateuacan urang bener nyieun kode backpropagation. Upami urang ngalakukeun kasalahan dina lapisan kaluaran urang, fungsi turunan biaya bakal nunjukkeun éta.
Merlukeun dua input: susunan aktivasina kaluaran jeung koordinat y tina nilai kaluaran diantisipasi.
Fungsi backpropagation
Vektor aktivasina ayeuna, aktivasina, sareng vektor aktivasina anu sanés, aktivasina, sareng z-vektor, zs, sadayana kedah diémutan. Lapisan anu disebut lapisan input diaktipkeun heula.
Urang bakal loop ngaliwatan unggal bias jeung beurat sanggeus nempatkeun aranjeunna nepi. Unggal loop ngalibatkeun ngitung vektor z salaku produk titik tina beurat jeung aktivasina, nambahkeun kana daptar zs, recalculating aktivasina, sarta nambahkeun aktivasina diropéa kana daptar aktivasina.
Tungtungna, math. Délta, nu sarua jeung kasalahan ti lapisan saméméhna dikali prima sigmoid sahiji elemen panungtungan sahiji vektor zs, diitung sateuacan urang ngamimitian pass mundur urang.
Lapisan panungtung nabla b disetel janten délta, sareng lapisan ahir nabla w disetel janten produk titik-titik délta sareng lapisan aktivasina kadua-ka-tungtung (transposed supados urang tiasa leres-leres ngalakukeun matématika) .
Urang neruskeun sakumaha saméméhna, dimimitian ku lapisan kadua jeung concluding jeung panungtungan, sarta ngulang prosés sanggeus completing lapisan panungtungan ieu. Nablas lajeng dibikeun deui salaku tuple a.
Ngamutahirkeun turunan gradién Mini-angkatan
Metoda SGD (stochastic gradient descent) kami ti saacanna ngalebetkeun pembaruan mini-angkatan. Kusabab éta garapan dina SGD tapi ogé merlukeun backprop, Kuring debat dimana nempatkeun fungsi ieu.
Tungtungna, kuring nyieun pilihan pikeun masangkeunana di dieu. Dimimitian ku ngahasilkeun 0 vektor tina nablas bias sareng beurat, sapertos fungsi backprop urang.
Merlukeun mini-batch jeung laju learning eta salaku dua inputs na. Dina mini bets, urang lajeng nganggo fungsi backprop pikeun ménta délta unggal Asép Sunandar Sunarya nabla pikeun tiap input, x, jeung kaluaran, y. Daptar nabla lajeng diropéa kalawan délta ieu.
Tungtungna, kami nganggo laju diajar sareng nablas pikeun ngapdet beurat sareng bias jaringan. Unggal nilai diropéa kana nilai panganyarna, kirang laju learning, dikali ukuran minibatch, lajeng ditambahkeun kana nilai nabla.
Evaluate fungsi
Fungsi evaluasi mangrupikeun anu terakhir anu urang kedah nyerat. Data tés mangrupikeun hiji-hijina input pikeun fungsi ieu. Dina fungsi ieu, urang ngan ngabandingkeun kaluaran jaringan jeung hasil diantisipasi, y. Ku nyoco input, x, maju, kaluaran jaringan ditangtukeun.
Kode lengkep
Nalika urang ngagabungkeun sakabeh kode, ieu téh kumaha eta nembongan.
Nguji Neural Network
Ngamuat data MNIST
nu data MNIST aya dina format .pkl.gz, nu urang buka maké GZIP tur muka kalawan acar. Hayu urang nyerat metode gancang pikeun ngamuat data ieu salaku tuple ukuran tilu, dibagi kana latihan, validasi, sareng data tés.
Sangkan data urang leuwih gampang pikeun ngatur, urang gé nulis fungsi sejen pikeun encode y kana Asép Sunandar Sunarya 10-item. Asép Sunandar Sunarya bakal sadayana 0s iwal hiji 1 nu cocog angka ditangtoskeun gambar urang.
Kami bakal nganggo data beban dasar sareng hiji metode encode panas pikeun ngamuat data kami kana format anu tiasa dibaca. Fungsi sejen bakal ditulis anu bakal ngarobah nilai x urang kana daptar ukuranana 784, cocog jeung gambar urang 784 piksel, sarta nilai y urang kana tunggal panas disandikeun formulir vektor maranéhanana.
Teras kami bakal ngagabungkeun nilai x sareng y supados hiji indéks cocog sareng anu sanés. Ieu lumaku pikeun latihan, validasi, sareng set data tés. Urang lajeng mulangkeun data robah.
Ngajalankeun Tés
Kami bakal ngadamel file énggal anu disebut "mnist loader" anu bakal ngimpor jaringan neural anu kami diadegkeun saacanna (simple nn) sareng loader set data MNIST sateuacan urang ngamimitian nguji.
Dina file ieu, sadaya anu urang kedah laksanakeun nyaéta ngimpor data, ngawangun jaringan kalayan ukuran lapisan input 784 sareng ukuran lapisan kaluaran 10, ngajalankeun fungsi SGD jaringan dina data pelatihan, teras uji nganggo data uji.
Émut yén pikeun daptar lapisan input, henteu aya bédana naon waé nomer antara 784 sareng 10. Urang tiasa ngarobih lapisan anu sanés ku cara naon waé anu dipikahoyong; ngan ukuran input sareng kaluaran tetep.
Tilu lapisan teu perlu; urang bisa make opat, lima, atawa malah ngan dua. Gaduh senang experimenting kalawan eta.
kacindekan
Di dieu, ngagunakeun Python 3, urang nyieun jaringan neural ti scratch. Marengan math tingkat luhur, urang ogé ngabahas spésifik palaksanaan.
Urang mimitian ku ngalaksanakeun fungsi helper. Pikeun neuron tiasa dianggo, fungsi prima sigmoid sareng sigmoid penting pisan. Urang teras ngalaksanakeun fungsi feedforward, anu mangrupikeun prosés dasar pikeun nyoco data kana jaringan saraf.
Salajengna, urang nyiptakeun fungsi turunan gradién dina Python, mesin anu ngajalankeun jaringan saraf urang. Pikeun milarian "minima lokal" sareng ngaoptimalkeun beurat sareng biasna, jaringan saraf kami nganggo turunan gradién. Urang dijieun fungsi backpropagation ngagunakeun turunan gradién.
Ku ngirimkeun apdet nalika kaluaran henteu cocog sareng labél anu leres, fungsi ieu ngamungkinkeun jaringan saraf "diajar."
Tungtungna, kami nempatkeun Python anyar kami jaringan neural pikeun nguji ngagunakeun set data MNIST. Sagalana jalan lancar.
Senang Coding!
Leave a Reply