Pada artikel ini kita akan belajar bagaimana mengintegrasikan jaringan saraf di SBC. Kami akan membuat jaringan saraf 3 lapis untuk mendekati fungsi sin(x).
Prosesnya dibagi menjadi dua bagian: 1. pelatihan jaringan, yang akan dilakukan di PC dan; 2. menjalankan jaringan, yang akan dilakukan di SBC.
Bagian 1. Pelatihan Neural Network
Untuk bagian ini kita akan menggunakan notebook Jupyter, dengan perpustakaan Keras, Numpy dan Pylab.
Langkah 1. Impor perpustakaan yang diperlukan

Langkah 2. Buat set data pelatihan
Dataset kami terdiri dari 10000 angka acak dalam rentang 0 – 2*pi sebagai input X dan fungsi sin yang sesuai sebagai input Y. Perhatikan bahwa kami telah menyesuaikan rentang Y hingga berkisar dari 0 hingga 1.

Langkah 3. Buat jaringan saraf
Untuk membuat jaringan saraf, kami membuat objek model dan menambahkan 3 lapisan ke dalamnya. Ini dilakukan melalui API yang disediakan oleh perpustakaan Keras.
Jumlah neuron akan menjadi 32 untuk lapisan pertama, 32 untuk lapisan tengah, dan 1 untuk output.
Kami akan menggunakan aktivasi relu dan sigmoid.
Optimizer yang digunakan adalah Adam dan fungsi error MSE.
Jumlah parameter jaringan adalah 1153.

Langkah 4. Pelatihan
Saat pelatihan, jaringan saraf menggunakan kumpulan data untuk menyesuaikan parameternya sedemikian rupa sehingga kesalahan diminimalkan.
Dalam hal ini, kami melewati seluruh kumpulan data melalui jaringan 10 kali, dalam 32 kumpulan sampel.
Seperti yang kita lihat, di akhir pelatihan, kesalahannya sangat kecil, 2.5e-5.

Langkah 5. Verifikasi
Sekarang kita akan menguji jaringan saraf untuk terakhir kalinya dan membandingkannya dengan nilai yang diharapkan. Seperti yang terlihat pada grafik, jaringan mendekati fungsi sinus dengan cukup baik.

Langkah 6. Ekspor data
Fungsi ini memungkinkan Anda untuk mengekspor bobot jaringan saraf ke file teks dan kemudian memuatnya dari SBC.

Bagian 2. Eksekusi di SBC
Pertama-tama, kami akan meninjau implementasi jaringan saraf.
Jaringan saraf dibagi menjadi 4 kelas: Neural_Network, Layer, Perceptron dan Aktivasi.
Setiap kelas pada dasarnya memiliki 1 metode yang disebut proses yang bertugas melakukan semua pekerjaan, serta metode pemuatan dan penyimpanan.
The Activation class, mengimplementasikan fungsi aktivasi linier, relu, sigmoid, dan tanh.

The perceptron class bertanggung jawab untuk melakukan semua perkalian. Perhatikan bahwa fungsi perkalian vektor diimplementasikan dalam ASM agar tidak mengorbankan kinerja.


Implementasi ASM vs Python
Perkalian vektor bertanggung jawab atas sebagian besar penggunaan CPU, jadi menerapkannya pada ASM memungkinkan peningkatan kinerja perpustakaan dengan banyak. Dalam contoh ini, perkalian vektor 100x100 sederhana dilakukan. Implementasi python membutuhkan 1339 us, sementara implementasi ASM hanya membutuhkan 28 us. Ini sekitar 50x lebih cepat sambil mempertahankan nilai output yang sama.

The Lapisan kelompok kelas beberapa perceptron secara paralel.

Kelas Jaringan syaraf menumpuk semua lapisan jaringan.

Terakhir, kami dapat meninjau/memeriksa penggunaan jaringan.
Kami akan menyalin file dengan bobot ke SBC dan menjalankan main.py berikut.
Kode ini memuat jaringan dari file sine.unn dan menghitung sinus 0.123 dan kemudian menampilkan nilai yang diperoleh jaringan dan sinus nyata, serta waktu perhitungan dalam mikrodetik.

Keluaran:

Seperti yang kita lihat, output mendekati nilai yang diharapkan dengan 4 desimal.
Jaringan ini, dengan bobot 1153, membutuhkan 4612(1153*4) byte RAM untuk menyimpan bobot dalam nilai float dan 5.8 ms untuk diproses.
dan
