Ažuriranje (19.): Imamo dosta zaliha svih naših proizvoda, pronađite nas i ovdje i    Kupi

Kako integrirati neuronsku mrežu u svoj SBC

U ovom ćemo članku naučiti kako integrirati neuronsku mrežu u SBC. Napravit ćemo troslojnu neuronsku mrežu za aproksimaciju funkcije sin(x).

Proces je podijeljen u dva dijela: 1. obuka mreže koja će se raditi na PC-u i; 2. vođenje mreže, što će se obavljati u SBC-u.

Dio 1. Trening neuronske mreže

Za ovaj dio koristit ćemo Jupyter bilježnice, s bibliotekama Keras, Numpy i Pylab.

Korak 1. Uvezite potrebne biblioteke

Korak 2. Kreirajte skup podataka za obuku

Naš skup podataka sastoji se od 10000 slučajnih brojeva u rasponu od 0 – 2*pi kao ulaz X i njihove odgovarajuće sin funkcije kao ulaza Y. Imajte na umu da smo podesili raspon Y u rasponu od 0 do 1.

Korak 3. Napravite neuronsku mrežu

Da bismo stvorili neuronsku mrežu, kreiramo objekt modela i dodamo mu 3 sloja. To se radi putem API-ja koji nudi biblioteka Keras.

Broj neurona bit će 32 za prvi sloj, 32 za srednji sloj i 1 za izlaz.

Koristit ćemo relu i sigmoidnu aktivaciju.

Korišteni optimizator je Adam i funkcija pogreške MSE.

Broj mrežnih parametara je 1153.

Korak 4. Trening

Prilikom treninga, neuronska mreža koristi skup podataka kako bi prilagodila svoje parametre na takav način da se pogreška svede na minimum.

U ovom slučaju, cijeli skup podataka smo prošli kroz mrežu 10 puta, u serijama od 32 uzorka.

Kao što vidimo, na kraju treninga greška je vrlo mala, 2.5e-5.

Korak 5. Provjera

Sada ćemo posljednji put testirati neuronsku mrežu i usporediti je s očekivanim vrijednostima. Kao što se vidi na grafikonu, mreža prilično dobro aproksimira sinusnu funkciju.

Korak 6. Izvezite podatke

Ova funkcija vam omogućuje da izvezete težine neuronske mreže u tekstualnu datoteku i zatim je učitate iz SBC-a.

Dio 2. Izvršenje na SBC

Prije svega, razmotrit ćemo implementaciju neuronske mreže.

Neuronska mreža je podijeljena u 4 klase: Neuralna_Network, Layer, Perceptron i Activation.

Svaka klasa u osnovi ima 1 metodu nazvanu proces koja je zadužena za obavljanje cjelokupnog posla, kao i metode učitavanja i spremanja.

Korištenje električnih romobila ističe aktiviranje klase, implementira linearne, relu, sigmoidne i tanh aktivacijske funkcije.

Korištenje električnih romobila ističe perceptron razred je odgovoran za izvođenje svih množenja. Imajte na umu da je funkcija vektorskog množenja implementirana u ASM kako se ne bi žrtvovale performanse.

ASM vs Python implementacija

Vektorsko množenje odgovorno je za veći dio korištenja CPU-a, tako da njegova implementacija na ASM-u omogućuje znatno poboljšanje performansi knjižnice. U ovom primjeru izvodi se jednostavno 100×100 vektorsko množenje. Python implementacija traje 1339 us, dok implementacija ASM traje samo 28 us. To je oko 50x brže uz očuvanje istih izlaznih vrijednosti.

Korištenje električnih romobila ističe sloj razred paralelno grupira nekoliko perceptrona.

Razred Živčana mreža slaže sve mrežne slojeve.

Konačno, možemo pregledati/provjeriti korištenje mreže.

Kopirat ćemo datoteku s ponderima u SBC i izvršiti sljedeći main.py.

Ovaj kod učitava mrežu iz datoteke sine.unn i izračunava sinus od 0.123, a zatim prikazuje vrijednost dobivenu mrežom i realni sinus, kao i vrijeme izračuna u mikrosekundama.

Izlaz:

Kao što vidimo, izlaz aproksimira očekivanu vrijednost s 4 decimale.

Ova mreža, s 1153 pondera, zahtijevala je 4612 (1153*4) bajta RAM-a za pohranu pondera u float vrijednosti i 5.8 ms za obradu.

Ako vam se svidio ovaj sadržaj, možete nas pratiti na X / Twitter, YouTube, Facebook or LinkedIn da biste bili u tijeku s ovakvim sadržajem.

Imate pitanja ili zahtjeva?
Kontaktirajte nas! Odgovaramo <24 sata!

Ikona
Kontakt ArduSimple
Blizu

Želite saznati više o GPS/RTK?

1. Naš inženjerski tim će vas kontaktirati kako bismo riješili sva pitanja
2. Obavještavat ćemo vas o promocijama i novim izdanjima proizvoda
3. Javit ćemo vam se samo kada budemo imali važne vijesti, nećemo spamati vašu e-poštu