Bab lan Paragraf[Singidaken][Tampilake]
Otak bisa dibandhingake karo jaringan saraf. Iki minangka analogi sing biasane digunakake kanggo nulungi wong sing anyar babagan subjek kasebut supaya ngerti ide ing mburi pembelajaran mesin lan jaringan syaraf tiruan.
Amarga ana sawetara lapisan komputasi matématika lan statistik sing ana ing mburi layar, nemtokake jaringan kasebut minangka fungsi matematika minangka cara sing luwih maju.
Iki kanggo wong sing bener-bener kasengsem ing sinau mesin lan pengin ndeleng carane kode jaringan saraf Python ditulis.
Ing artikel iki, kita bakal nduduhake carane mbangun jaringan syaraf jero (DNN) sing disambungake kanthi lengkap wiwit wiwitan Python 3.
Ringkesan Struktur File kanggo Kode Jaringan Syaraf Python Kita
Bakal ana telung file sing digawe ing kene. Pisanan yaiku file nn.py sing prasaja, sing bakal dibahas ing "Setting Up Helper Functions" lan "Mbangun Jaringan Neural saka Scratch."
Kita uga bakal duwe file sing jenenge mnist loader.py kanggo mbukak data tes, kaya sing diterangake ing "Ngunggah Data MNIST."
Pungkasan, kita bakal duwe file sing jenenge test.py sing bakal diluncurake ing terminal kanggo nyoba jaringan saraf kita.
Berkas iki diterangake kanthi rinci ing "Tes Running."
instalasi
Pustaka NumPy Python kudu didownload supaya bisa ngetutake tutorial iki. Sampeyan bisa nindakake iki kanthi nggunakake printah ing ngisor iki ing terminal:
Ngimpor Modul lan nyetel fungsi Helper
Mung rong perpustakaan sing dibutuhake yaiku acak lan NumPy, sing bakal langsung diimpor. Kanggo bobot awal jaringan saraf kita, kita bakal ngacak kanthi nggunakake perpustakaan acak.
Kanggo nyepetake komputasi, kita bakal nggunakake NumPy utawa np (kanthi konvensi, asring diimpor minangka np). Kita loro fungsi helper bakal digawe sawise kita impor. Loro fungsi sigmoid: siji lan prima sigmoid.
Regresi logistik bakal nggolongake data nggunakake fungsi sigmoid, dene backpropagation bakal ngetung delta utawa gradien nggunakake fungsi prima sigmoid.
Nggawe Kelas Jaringan
Mbangun jaringan saraf sing disambung kanthi lengkap minangka fokus ing bagean iki. Kelas jaringan bakal nyakup kabeh fungsi sing bakal ditindakake. Fungsi Object() { [kode asli] } bakal digawe ing kelas jaringan kita.
Siji argumen, ukuran, dibutuhake dening fungsi Object() { [kode asli] }. Variabel ukuran minangka kumpulan nilai numerik sing nuduhake jumlah node input sing ana ing saben lapisan jaringan saraf kita.
Kita miwiti patang sifat ing metode __init__ kita. Variabel input, ukuran, digunakake kanggo nyetel dhaptar ukuran lapisan lan jumlah lapisan, num lapisan, mungguh.
Langkah pisanan yaiku kanthi acak nemtokake bias awal jaringan kanggo saben lapisan sing ngetutake lapisan input.
Pungkasan, saben pranala ing antarane lapisan input lan output nduweni bobot sing digawe kanthi acak. Np.Random.Randn () menehi sampel acak digambar saka distribusi normal kanggo konteks.
Fungsi Feed Forward
Ing jaringan saraf, informasi dikirim maju dening fungsi feedforward. Siji argumen, a, sing nuduhake vektor aktivasi saiki, bakal dibutuhake dening fungsi iki.
Fungsi iki ngira aktivasi ing saben lapisan kanthi ngulang kabeh bias lan bobot ing jaringan. Jawaban sing diwenehake yaiku prediksi, yaiku aktivasi lapisan pungkasan.
Mini-batch Gradient Descent
Workhorse kelas Jaringan kita yaiku Gradient Descent. Ing versi iki, kita nggunakake mini-batch (stochastic) keturunan gradien, variasi modifikasi saka gradien keturunan.
Iki nuduhake yen kumpulan cilik titik data bakal digunakake kanggo nganyari model kita. Papat sing dibutuhake lan siji argumen opsional diterusake menyang metode iki. Papat variabel sing dibutuhake yaiku set data latihan, jumlah epoch, ukuran mini-batch, lan tingkat sinau (eta).
Data tes kasedhiya yen dijaluk. Kita bakal nyedhiyakake data tes nalika pungkasane ngevaluasi jaringan iki. Jumlah conto ing fungsi iki wiwitane disetel menyang dawa dhaptar yen data latihan wis diowahi dadi jinis dhaptar.
Kita uga ngetrapake proses sing padha kanggo nguji data sing diwenehake. Iki amarga tinimbang bali menyang kita minangka dhaptar, dheweke pancene minangka dhaptar dhaptar. Nalika kita mbukak conto data MNIST mengko, kita bakal sinau luwih lengkap babagan iki.
Yen kita bisa nggawe manawa kita nyedhiyani loro jinis data minangka dhaptar, banjur jinis-casting iki ora kudu penting.
Sawise kita duwe data, kita pindhah liwat epochs latihan ing daur ulang. Periode latihan mung siji babak latihan jaringan saraf. Kita pisanan ngacak data ing saben jaman kanggo mesthekake randomness sadurunge nggawe dhaptar mini-batch.
Fungsi batch mini nganyari, sing dibahas ing ngisor iki, bakal diarani saben mini-batch. Akurasi tes uga bakal bali yen data tes kasedhiya.
Fungsi helper turunan biaya
Ayo gawe fungsi helper sing diarani cost derivative dhisik sadurunge nggawe kode backpropagation. Yen kita nggawe kesalahan ing lapisan output kita, fungsi turunan biaya bakal nuduhake.
Mbutuhake rong input: array aktivasi output lan koordinat y saka nilai output sing diantisipasi.
Fungsi backpropagation
Vektor aktivasi saiki, aktivasi, uga vektor aktivasi liyane, aktivasi, lan z-vektor, zs, kabeh kudu dielingi. Lapisan sing diarani lapisan input diaktifake dhisik.
Kita bakal daur ulang liwat saben bias lan bobot sawise sijine munggah. Saben daur ulang kalebu ngetung vektor z minangka produk titik saka bobot lan aktivasi, nambahake menyang dhaptar zs, ngitung maneh aktivasi, lan nambah aktivasi sing dianyari menyang dhaptar aktivasi.
Akhire, matematika. Delta, sing padha karo kesalahan saka lapisan sadurunge dikalikan karo prima sigmoid saka unsur pungkasan saka vektor zs, diitung sadurunge kita miwiti pass mundur.
Lapisan pungkasan nabla b disetel dadi delta, lan lapisan pungkasan nabla w disetel dadi produk titik delta lan lapisan aktivasi kapindho nganti pungkasan (transposed supaya kita bisa nindakake math) .
Kita nerusake kaya sadurunge, diwiwiti kanthi lapisan kapindho lan rampung karo sing pungkasan, lan baleni proses kasebut sawise ngrampungake lapisan pungkasan kasebut. Nablas banjur diparingake maneh minangka tuple.
Nganyari turunan gradien kumpulan Mini
Metode SGD (stochastic gradient descent) saka sadurunge nggabungake nganyari batch mini. Awit iku digunakake ing SGD nanging uga mbutuhake backprop, Aku debat ngendi kanggo nyelehake fungsi iki.
Akhire, aku nggawe pilihan kanggo ngirim kene. Diwiwiti kanthi ngasilake 0 vektor saka nablas bias lan bobot, kaya fungsi backprop kita.
Mbutuhake mini-batch lan tingkat sinau eta minangka rong input. Ing mini-batch, kita banjur nggunakake fungsi backprop kanggo njupuk delta saben array nabla kanggo saben input, x, lan output, y. Dhaptar nabla banjur dianyari karo delta iki.
Pungkasan, kita nggunakake tingkat sinau lan nablas kanggo nganyari bobot lan bias jaringan. Saben nilai dianyari menyang nilai paling anyar, kurang tingkat learning, pingan dening ukuran minibatch, lan banjur ditambahake menyang Nilai nabla.
Evaluasi fungsi
Fungsi evaluasi minangka fungsi pungkasan sing kudu kita tulis. Data test mung input kanggo fungsi iki. Ing fungsi iki, kita mung mbandhingaké output saka jaringan karo asil diantisipasi, y. Kanthi feed input, x, maju, output jaringan ditemtokake.
Kode Lengkap
Nalika kita gabungke kabeh kode, iki carane katon.
Pengujian Neural Network
Ngunggah data MNIST
The data MNIST ana ing format .pkl.gz, sing bakal dibukak nganggo GZIP lan diisi karo pickle. Ayo nulis cara cepet kanggo mbukak data iki minangka tuple ukuran telu, dibagi dadi data latihan, validasi, lan tes.
Kanggo nggawe data luwih gampang kanggo ngatur, kita bakal nulis fungsi liyane kanggo encode y menyang array 10-item. Array bakal dadi kabeh 0s kajaba 1 sing cocog karo digit gambar sing tepat.
Kita bakal nggunakake data beban dhasar lan siji cara encode panas kanggo mbukak data menyang format sing bisa diwaca. Fungsi liyane bakal ditulis sing bakal ngowahi nilai x kita dadi dhaptar ukuran 784, cocog karo gambar 784 piksel, lan nilai y dadi bentuk vektor sing dienkode panas.
Banjur kita bakal gabungke nilai x lan y supaya siji indeks cocog karo liyane. Iki ditrapake kanggo latihan, validasi, lan set data tes. Banjur kita bali data sing diganti.
Tes mlaku
Kita bakal nggawe file anyar sing diarani "mnist loader" sing bakal ngimpor loro jaringan saraf sing wis digawe sadurunge (nn prasaja) lan loader set data MNIST sadurunge miwiti nyoba.
Ing file iki, kabeh sing kudu ditindakake yaiku ngimpor data, mbangun jaringan kanthi ukuran lapisan input 784 lan ukuran lapisan output 10, mbukak fungsi SGD jaringan ing data latihan, banjur nyoba nggunakake data tes.
Elinga yen kanggo dhaptar lapisan input, ora ana prabédan apa wae nomer antarane 784 lan 10. Kita bisa ngganti lapisan liyane kanthi cara sing dikarepake; mung ukuran input lan output tetep.
Telung lapisan ora perlu; kita bisa nggunakake papat, lima, utawa malah mung loro. Seneng-seneng eksperimen karo.
kesimpulan
Ing kene, nggunakake Python 3, kita nggawe jaringan saraf saka awal. Bebarengan karo matematika tingkat dhuwur, kita uga ngrembug babagan spesifik implementasine.
Kita miwiti kanthi ngleksanakake fungsi helper. Supaya neuron bisa kerja, fungsi prima sigmoid lan sigmoid penting banget. Banjur kita nindakake fungsi feedforward, yaiku proses dhasar kanggo nyedhiyakake data menyang jaringan saraf.
Sabanjure, kita nggawe fungsi keturunan gradien ing Python, mesin sing nyopir jaringan saraf kita. Kanggo nemokake "minima lokal" lan ngoptimalake bobot lan bias, jaringan saraf kita nggunakake keturunan gradien. Kita nggawe fungsi backpropagation nggunakake keturunan gradien.
Kanthi ngirim nganyari nalika output ora cocog karo label sing tepat, fungsi iki ngidini jaringan saraf bisa "sinau."
Pungkasan, kita sijine Python anyar kita jaringan saraf kanggo test nggunakake set data MNIST. Kabeh mlaku kanthi lancar.
Seneng Coding!
Ninggalake a Reply