Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Equipment >> Robot industri

Cara Membuat Jaringan Neural Perceptron Multilayer dengan Python

Artikel ini membawa Anda langkah demi langkah melalui program Python yang memungkinkan kami melatih jaringan saraf dan melakukan klasifikasi lanjutan.

Ini adalah entri ke-12 dalam seri pengembangan jaringan saraf AAC. Lihat apa lagi yang ditawarkan seri ini di bawah ini:

  1. Bagaimana Melakukan Klasifikasi Menggunakan Jaringan Syaraf Tiruan:Apa Itu Perceptron?
  2. Cara Menggunakan Contoh Jaringan Neural Perceptron Sederhana untuk Mengklasifikasikan Data
  3. Cara Melatih Jaringan Neural Perceptron Dasar
  4. Memahami Pelatihan Jaringan Syaraf Sederhana
  5. Pengantar Teori Pelatihan untuk Jaringan Neural
  6. Memahami Kecepatan Pembelajaran di Jaringan Neural
  7. Pembelajaran Mesin Tingkat Lanjut dengan Perceptron Multilayer
  8. Fungsi Aktivasi Sigmoid:Aktivasi di Jaringan Neural Perceptron Multilayer
  9. Cara Melatih Jaringan Neural Perceptron Multilayer
  10. Memahami Rumus Pelatihan dan Backpropagation untuk Perceptron Multilayer
  11. Arsitektur Jaringan Saraf untuk Implementasi Python
  12. Cara Membuat Jaringan Neural Perceptron Multilayer dengan Python
  13. Pemrosesan Sinyal Menggunakan Jaringan Saraf Tiruan:Validasi dalam Desain Jaringan Saraf Tiruan
  14. Pelatihan Kumpulan Data untuk Jaringan Neural:Cara Melatih dan Memvalidasi Jaringan Neural Python

Dalam artikel ini, kami akan mengambil pekerjaan yang telah kami lakukan di jaringan saraf Perceptron dan mempelajari cara menerapkannya dalam bahasa yang sudah dikenal:Python.

Mengembangkan Kode Python yang Dapat Dipahami untuk Jaringan Neural

Baru-baru ini saya telah melihat beberapa sumber online untuk jaringan saraf, dan meskipun tidak diragukan lagi ada banyak informasi bagus di luar sana, saya tidak puas dengan implementasi perangkat lunak yang saya temukan. Mereka selalu terlalu rumit, atau terlalu padat, atau tidak cukup intuitif. Ketika saya menulis jaringan saraf Python saya, saya benar-benar ingin membuat sesuatu yang dapat membantu orang belajar tentang bagaimana sistem berfungsi dan bagaimana teori jaringan saraf diterjemahkan ke dalam instruksi program.

Namun, terkadang ada hubungan terbalik antara kejelasan kode dan efisiensi kode. Program yang akan kita bahas di artikel ini pasti bukan dioptimalkan untuk kinerja yang cepat. Optimalisasi adalah masalah serius dalam domain jaringan saraf; aplikasi kehidupan nyata mungkin memerlukan sejumlah besar pelatihan, dan akibatnya optimasi menyeluruh dapat menyebabkan pengurangan yang signifikan dalam waktu pemrosesan. Namun, untuk eksperimen sederhana seperti yang akan kita lakukan, pelatihan tidak memakan waktu lama, dan tidak ada alasan untuk menekankan praktik coding yang mengutamakan kesederhanaan dan pemahaman daripada kecepatan.

Seluruh program Python disertakan sebagai gambar di akhir artikel ini, dan file (“MLP_v1.py”) disediakan sebagai unduhan. Kode melakukan pelatihan dan validasi; artikel ini berfokus pada pelatihan, dan kami akan membahas validasi nanti. Bagaimanapun, tidak banyak fungsi di bagian validasi yang tidak tercakup dalam bagian pelatihan.

Saat Anda merenungkan kodenya, Anda mungkin ingin melihat kembali diagram arsitektur-plus-terminologi yang sedikit berlebihan namun sangat informatif yang saya berikan di Bagian 10.


Menyiapkan Fungsi dan Variabel

Pustaka NumPy digunakan secara ekstensif untuk penghitungan jaringan, dan pustaka Pandas memberi saya cara mudah untuk mengimpor data pelatihan dari file Excel.

Seperti yang sudah Anda ketahui, kami menggunakan fungsi sigmoid logistik untuk aktivasi. Kita membutuhkan fungsi logistik itu sendiri untuk menghitung nilai pascaaktivasi, dan turunan dari fungsi logistik diperlukan untuk propagasi balik.

Selanjutnya kita memilih learning rate, dimensionality dari input layer, dimensionality dari hidden layer, dan epoch count. Pelatihan selama beberapa zaman penting untuk jaringan saraf nyata, karena memungkinkan Anda untuk mengekstrak lebih banyak pembelajaran dari data pelatihan Anda. Saat membuat data pelatihan di Excel, Anda tidak perlu menjalankan beberapa epoch karena Anda dapat dengan mudah membuat lebih banyak sampel pelatihan.

np.random.uniform() fungsi mengisi dua matriks bobot kami dengan nilai acak antara -1 dan +1. (Perhatikan bahwa matriks hidden-to-output sebenarnya hanyalah sebuah array, karena kita hanya memiliki satu node output.) np.random.seed(1) pernyataan menyebabkan nilai acak menjadi sama setiap kali Anda menjalankan program. Nilai bobot awal dapat memiliki pengaruh yang signifikan pada kinerja akhir jaringan terlatih, jadi jika Anda mencoba menilai bagaimana lainnya variabel meningkatkan atau menurunkan kinerja, Anda dapat menghapus komentar pada instruksi ini dan dengan demikian menghilangkan pengaruh inisialisasi bobot acak.

Terakhir, saya membuat array kosong untuk nilai praaktivasi dan pascaaktivasi di lapisan tersembunyi.

Mengimpor Data Pelatihan

Ini adalah prosedur yang sama yang saya gunakan kembali di Bagian 4. Saya mengimpor data pelatihan dari Excel, memisahkan nilai target di kolom “output”, menghapus kolom “output”, mengonversi data pelatihan ke matriks NumPy, dan menyimpan jumlah sampel pelatihan di training_count variabel.

Pemrosesan Umpan Maju

Perhitungan yang menghasilkan nilai keluaran, dan di mana data bergerak dari kiri ke kanan dalam diagram jaringan saraf yang khas, merupakan bagian "umpan maju" dari operasi sistem. Berikut kode feedforwardnya:


Perulangan for pertama memungkinkan kita memiliki banyak epoch. Dalam setiap epoch, kami menghitung nilai output (yaitu, sinyal pascaaktivasi node output) untuk setiap sampel, dan operasi sampel demi sampel ditangkap oleh loop for kedua. Pada loop for ketiga, kita memperhatikan setiap node tersembunyi secara individual, menggunakan produk titik untuk menghasilkan sinyal praaktivasi dan fungsi aktivasi untuk menghasilkan sinyal pascaaktivasi.

Setelah itu, kami siap menghitung sinyal praaktivasi untuk simpul keluaran (sekali lagi menggunakan produk titik), dan kami menerapkan fungsi aktivasi untuk menghasilkan sinyal pascaaktivasi. Kemudian kita kurangi target dari sinyal pascaaktivasi node keluaran untuk menghitung kesalahan akhir.

Propagasi balik

Setelah kita melakukan perhitungan feedforward, saatnya untuk membalikkan arah. Di bagian backpropagation program, kita berpindah dari node output menuju bobot tersembunyi-ke-output dan kemudian bobot input-ke-tersembunyi, membawa informasi kesalahan yang kita gunakan untuk melatih jaringan secara efektif.

Kami memiliki dua lapisan untuk loop di sini:satu untuk bobot tersembunyi-ke-output, dan satu untuk bobot input-ke-tersembunyi. Pertama-tama kita buat SERROR , yang kita butuhkan untuk menghitung kedua gradienHtoO dan gradienItoH , lalu kami memperbarui bobot dengan mengurangi gradien dikalikan dengan kecepatan pembelajaran.

Perhatikan bagaimana bobot input-to-hidden diperbarui di dalam loop tersembunyi-ke-output. Kita mulai dengan sinyal kesalahan yang mengarah kembali ke salah satu node tersembunyi, kemudian kita memperluas sinyal kesalahan itu ke semua node input yang terhubung ke node tersembunyi yang satu ini:


Setelah semua bobot (baik ItoH dan HtoO) yang terkait dengan satu simpul tersembunyi telah diperbarui, kami mengulang kembali dan memulai lagi dengan simpul tersembunyi berikutnya.

Perhatikan juga bahwa bobot ItoH dimodifikasi sebelum bobot HtoO. Kami menggunakan bobot HtoO saat ini ketika kami menghitung gradienItoH , jadi kami tidak ingin mengubah bobot HtoO sebelum penghitungan ini dilakukan.

Kesimpulan

Sangat menarik untuk memikirkan berapa banyak teori yang telah masuk ke dalam program Python yang relatif singkat ini. Saya harap kode ini membantu Anda untuk benar-benar memahami bagaimana kami dapat mengimplementasikan jaringan saraf multilayer Perceptron dalam perangkat lunak.

Anda dapat menemukan kode lengkap saya di bawah ini:

Unduh Kode


Robot industri

  1. Cara Membuat Template CloudFormation Menggunakan AWS
  2. Bagaimana cara membuat pusat keunggulan cloud?
  3. Cara Membuat UX Tanpa Gesekan
  4. Cara membuat daftar string di VHDL
  5. Cara membuat testbench pemeriksaan mandiri
  6. Cara membuat pengatur waktu di VHDL
  7. Cara membuat Proses Berjam di VHDL
  8. Memahami Minima Lokal dalam Pelatihan Jaringan Saraf
  9. Cara Membuat Array Objek di Java
  10. Python - Pemrograman Jaringan