Cara Melatih Jaringan Neural Perceptron Dasar
Artikel ini menyajikan kode Python yang memungkinkan Anda membuat bobot secara otomatis untuk jaringan saraf sederhana.
Selamat datang di seri AAC tentang jaringan saraf Perceptron. Jika Anda ingin memulai dari awal untuk latar belakang atau melompat ke depan, lihat artikel lainnya di sini:
- Bagaimana Melakukan Klasifikasi Menggunakan Jaringan Syaraf Tiruan:Apa Itu Perceptron?
- Cara Menggunakan Contoh Jaringan Neural Perceptron Sederhana untuk Mengklasifikasikan Data
- Cara Melatih Jaringan Neural Perceptron Dasar
- Memahami Pelatihan Jaringan Syaraf Sederhana
- Pengantar Teori Pelatihan untuk Jaringan Neural
- Memahami Kecepatan Pembelajaran di Jaringan Neural
- Pembelajaran Mesin Tingkat Lanjut dengan Perceptron Multilayer
- Fungsi Aktivasi Sigmoid:Aktivasi di Jaringan Neural Perceptron Multilayer
- Cara Melatih Jaringan Neural Perceptron Multilayer
- Memahami Rumus Pelatihan dan Backpropagation untuk Perceptron Multilayer
- Arsitektur Jaringan Saraf untuk Implementasi Python
- Cara Membuat Jaringan Neural Perceptron Multilayer dengan Python
- Pemrosesan Sinyal Menggunakan Jaringan Saraf Tiruan:Validasi dalam Desain Jaringan Saraf Tiruan
- Pelatihan Kumpulan Data untuk Jaringan Neural:Cara Melatih dan Memvalidasi Jaringan Neural Python
Klasifikasi dengan Perceptron Single-Layer
Artikel sebelumnya memperkenalkan tugas klasifikasi langsung yang kami periksa dari perspektif pemrosesan sinyal berbasis jaringan saraf. Hubungan matematis yang diperlukan untuk tugas ini sangat sederhana sehingga saya dapat merancang jaringan hanya dengan memikirkan bagaimana sekumpulan bobot tertentu akan memungkinkan simpul keluaran untuk mengkategorikan data masukan dengan benar.
Ini adalah jaringan yang saya rancang:
Fungsi aktivasi di simpul keluaran adalah langkah unit:
\[f(x)=\begin{cases}0 &x <0\\1 &x \geq 0\end{cases}\]
Diskusi menjadi sedikit lebih menarik ketika saya mempresentasikan jaringan yang membuat bobotnya sendiri melalui prosedur yang dikenal sebagai pelatihan:
Di sisa artikel ini, kita akan memeriksa kode Python yang saya gunakan untuk mendapatkan bobot ini.
Jaringan Neural Python
Ini kodenya:
impor panda impor numpy sebagai np masukan_redup =3 learning_rate =0,01 Bobot =np.random.rand(input_dim) #Berat[0] =0,5 #Berat[1] =0,5 #Berat[2] =0,5 Training_Data =pandas.read_excel("3D_data.xlsx") Output_yang diharapkan =Training_Data.output Training_Data =Training_Data.drop(['output'], axis=1) Data_Pelatihan =np.asarray(Data_Pelatihan) training_count =len(Data_Pelatihan[:,0]) untuk Epoch dalam rentang (0,5):untuk datum dalam range(0, training_count):Output_Sum =np.sum(np.multiply(Training_Data[datum,:], Bobot)) jika Output_Sum <0:Output_Nilai =0 kalau tidak:Output_Nilai =1 kesalahan =Expected_Output[datum] - Output_Value untuk n dalam rentang (0, input_dim):Bobot[n] =Bobot[n] + learning_rate*error*Training_Data[datum,n] print("w_0 =%.3f" %(Berat[0])) print("w_1 =%.3f" %(Berat[1])) print("w_2 =%.3f" %(Weights[2]))
Mari kita lihat lebih dekat petunjuk ini.
Mengonfigurasi Jaringan dan Mengatur Data
input_dim =3
Dimensinya dapat disesuaikan. Data input kami, jika Anda ingat, terdiri dari koordinat tiga dimensi, jadi kami membutuhkan tiga node input. Program ini tidak mendukung beberapa node keluaran, tetapi kami akan menggabungkan dimensi keluaran yang dapat disesuaikan ke dalam eksperimen mendatang.
learning_rate =0,01
Kami akan membahas kecepatan pembelajaran di artikel mendatang.
Bobot =np.random.rand(input_dim) #Berat[0] =0,5 #Berat[1] =0,5 #Weights[2] =0,5
Bobot biasanya diinisialisasi ke nilai acak. Fungsi numpy random.rand() menghasilkan array dengan panjang input_dim diisi dengan nilai acak yang terdistribusi pada interval [0, 1). Namun, nilai bobot awal mempengaruhi nilai bobot akhir yang dihasilkan oleh prosedur pelatihan, jadi jika Anda ingin mengevaluasi efek dari variabel lain (seperti ukuran set pelatihan atau kecepatan pembelajaran), Anda dapat menghilangkan faktor pengganggu ini dengan menyetel semua bobot ke konstanta yang diketahui, bukan angka yang dihasilkan secara acak.
Data_Pelatihan =pandas.read_excel("3D_data.xlsx")
Saya menggunakan perpustakaan pandas untuk mengimpor data pelatihan dari spreadsheet Excel. Artikel selanjutnya akan membahas lebih detail tentang data pelatihan.
Output_Yang Diharapkan =Training_Data.output Training_Data =Training_Data.drop(['output'], axis=1)
Kumpulan data pelatihan mencakup nilai input dan nilai output yang sesuai. Instruksi pertama memisahkan nilai keluaran dan menyimpannya dalam larik terpisah, dan instruksi berikutnya menghapus nilai keluaran dari kumpulan data pelatihan.
Data_Pelatihan =np.asarray(Data_Pelatihan) training_count =len(Training_Data[:,0])
Saya mengonversi kumpulan data pelatihan, yang saat ini merupakan struktur data panda, menjadi array numpy dan kemudian melihat panjang salah satu kolom untuk menentukan berapa banyak titik data yang tersedia untuk pelatihan.
Menghitung Nilai Keluaran
untuk epoch dalam range (0,5):
Durasi satu sesi pelatihan diatur oleh jumlah data pelatihan yang tersedia. Namun, Anda dapat terus mengoptimalkan bobot dengan melatih jaringan beberapa kali menggunakan kumpulan data yang sama—manfaat pelatihan tidak hilang hanya karena jaringan telah melihat data pelatihan ini. Setiap lintasan lengkap melalui seluruh set pelatihan disebut epoch.
untuk datum dalam rentang (0, training_count):
Prosedur yang terkandung dalam loop ini terjadi satu kali untuk setiap baris dalam set pelatihan, di mana "baris" mengacu pada sekelompok nilai data input dan nilai output yang sesuai (dalam kasus kami, grup input terdiri dari tiga angka yang mewakili x, y , dan z komponen suatu titik dalam ruang tiga dimensi).
Output_Sum =np.sum(np.multiply(Training_Data[datum,:], Weights))
Node keluaran harus menjumlahkan nilai yang dikirimkan oleh tiga simpul masukan. Implementasi Python saya melakukan ini dengan terlebih dahulu melakukan perkalian elemen Training_Data array dan Berat array dan kemudian menghitung penjumlahan elemen dalam array yang dihasilkan oleh perkalian tersebut.
jika Output_Sum <0:Output_Nilai =0 kalau tidak:Output_Value =1
Pernyataan if-else menerapkan fungsi aktivasi unit-langkah:jika penjumlahan kurang dari nol, nilai yang dihasilkan oleh simpul keluaran adalah 0; jika penjumlahan sama dengan atau lebih besar dari nol, nilai keluarannya adalah satu.
Memperbarui Bobot
Ketika perhitungan keluaran pertama selesai, kami memiliki nilai bobot, tetapi nilai tersebut tidak membantu kami mencapai klasifikasi karena dihasilkan secara acak. Kami mengubah jaringan saraf menjadi sistem klasifikasi yang efektif dengan berulang kali memodifikasi bobot sedemikian rupa sehingga secara bertahap mencerminkan hubungan matematis antara data input dan nilai output yang diinginkan. Modifikasi berat dilakukan dengan menerapkan aturan pembelajaran berikut untuk setiap baris dalam set pelatihan:
\[w_{new} =w+(\alpha\times(output_{expected}-output_{calculated})\times input)\]
Simbol \( \alpha \) menunjukkan kecepatan belajar. Jadi, untuk menghitung nilai bobot baru, kami mengalikan nilai input yang sesuai dengan tingkat pembelajaran dan dengan perbedaan antara output yang diharapkan (yang disediakan oleh set pelatihan) dan output yang dihitung, dan kemudian hasil perkalian ini ditambahkan dengan nilai bobot saat ini. Jika kita mendefinisikan delta (\(\delta\) ) sebagai (\(output_{expected} - output_{calculated}\)), kita dapat menulis ulang ini sebagai
\[w_{new} =w+(\alpha\times\delta\times input)\]
Beginilah cara saya menerapkan aturan pembelajaran dengan Python:
error =Expected_Output[datum] - Output_Value untuk n dalam rentang (0, input_dim):Bobot[n] =Bobot[n] + learning_rate*error*Training_Data[datum,n]
Kesimpulan
Anda sekarang memiliki kode yang dapat Anda gunakan untuk melatih Perceptron single-layer, single-output-node. Kami akan mengeksplorasi detail lebih lanjut tentang teori dan praktik pelatihan jaringan saraf di artikel berikutnya.