Update (23 / 01 / 2025): We hebben voldoende voorraad van al onze producten, vind ons ook in en    Shop nu

Een neuraal netwerk integreren in uw SBC

In dit artikel zullen we leren hoe we een neuraal netwerk kunnen integreren in de SBC. We zullen een 3-laags neuraal netwerk maken om de functie sin(x) te benaderen.

Het proces is opgedeeld in twee delen: 1. het trainen van het netwerk, wat op de pc zal gebeuren en; 2. het runnen van het netwerk, wat in de SBC zal gebeuren.

Deel 1. Neurale netwerktraining

Voor dit deel zullen we Jupyter-notebooks gebruiken, met de Keras-, Numpy- en Pylab-bibliotheken.

Stap 1. Importeer benodigde bibliotheken

Stap 2. Maak de trainingsdataset aan

Onze dataset bestaat uit 10000 willekeurige getallen in het bereik 0 – 2*pi als invoer X en hun corresponderende sin-functie als invoer Y. Merk op dat we het bereik van Y hebben aangepast om te variëren van 0 tot 1.

Stap 3. Creëer het neurale netwerk

Om het neurale netwerk te maken, maken we een modelobject en voegen we er 3 lagen aan toe. Dit gebeurt via de API van de Keras-bibliotheek.

Het aantal neuronen is 32 voor de eerste laag, 32 voor de middelste laag en 1 voor de uitvoer.

We zullen de relu- en sigmoid-activeringen gebruiken.

De gebruikte optimizer is Adam en de foutfunctie MSE.

Het aantal netwerkparameters is 1153.

Stap 4. Trainen

Bij het trainen gebruikt het neurale netwerk de dataset om zijn parameters zo aan te passen dat de fout geminimaliseerd wordt.

In dit geval hebben we de volledige dataset 10 keer door het netwerk gestuurd, in batches van 32 monsters.

Zoals we kunnen zien, is de fout aan het einde van de training erg klein, 2.5e-5.

Stap 5. Verificatie

Nu gaan we het neurale netwerk nog een laatste keer testen en vergelijken met de verwachte waarden. Zoals te zien is in de grafiek, benadert het netwerk de sinusfunctie vrij goed.

Stap 6. Exporteer de gegevens

Met deze functie kunt u de gewichten van het neurale netwerk naar een tekstbestand exporteren en het vervolgens vanuit de SBC laden.

Deel 2. Uitvoering op de SBC

Allereerst zullen we de implementatie van het neurale netwerk bespreken.

Het neurale netwerk is verdeeld in 4 klassen: Neural_Network, Layer, Perceptron en Activation.

Elke klasse heeft in principe 1 methode, proces genaamd, die verantwoordelijk is voor het doen van al het werk, evenals voor het laden en opslaan van methoden.

De Activering class, implementeert de lineaire, relu, sigmoid en tanh activeringsfuncties.

De perceptron klasse is verantwoordelijk voor het uitvoeren van alle vermenigvuldigingen. Merk op dat de vectorvermenigvuldigingsfunctie in ASM is geïmplementeerd om de prestaties niet op te offeren.

ASM versus Python-implementatie

De vectorvermenigvuldiging is verantwoordelijk voor het grootste deel van het CPU-gebruik, dus door het op ASM te implementeren, kunnen de bibliotheekprestaties aanzienlijk worden verbeterd. In dit voorbeeld wordt een eenvoudige 100×100 vectorvermenigvuldiging uitgevoerd. Een python-implementatie kost 1339 us, terwijl de ASM-implementatie slechts 28us kost. Dit is ongeveer 50x sneller met behoud van dezelfde uitvoerwaarden.

De Verschillende Lagen klasse groepeert een paar perceptrons parallel.

De klas Neural Network stapelt alle netwerklagen.

Ten slotte kunnen we het gebruik van het netwerk bekijken/controleren.

We zullen het bestand met de gewichten naar de SBC kopiëren en het volgende main.py uitvoeren.

Deze code laadt het netwerk uit het sine.unn-bestand en berekent de sinus van 0.123 en geeft vervolgens de door het netwerk verkregen waarde en de echte sinus weer, evenals de rekentijd in microseconden.

uitgang:

Zoals we zien, benadert de uitvoer de verwachte waarde met 4 decimalen.

Dit netwerk, met 1153 gewichten, had 4612 (1153*4) bytes RAM nodig om gewichten op te slaan in float-waarde en 5.8 ms om te verwerken.

Als je deze inhoud leuk vond, kun je ons volgen Twitter, YouTube, Facebook or LinkedIn om op de hoogte te blijven van dit soort inhoud.

Heeft u vragen of verzoeken?
Neem contact met ons op! Wij antwoorden <24 uur!

icon
Contact ArduSimple
Sluiten

Meer weten over GPS/RTK?

1. Ons technische team zal contact met u opnemen om eventuele vragen op te lossen!
2. We houden u op de hoogte van promoties en nieuwe productreleases
3. U hoort alleen van ons als we belangrijk nieuws hebben, we zullen uw e-mail niet spammen