Aktualizace (02 / 12 / 2024): Všech našich produktů máme dostatek skladem, najdete nás také v a    Zobrazit kolekci

Jak integrovat neuronovou síť do vašeho SBC

V tomto článku se naučíme, jak integrovat neuronovou síť do SBC. Vytvoříme 3-vrstvou neuronovou síť pro aproximaci funkce sin(x).

Proces je rozdělen do dvou částí: 1. trénování sítě, které bude probíhat na PC a; 2. spuštění sítě, což bude provedeno v SBC.

Část 1. Trénink neuronové sítě

Pro tuto část použijeme notebooky Jupyter s knihovnami Keras, Numpy a Pylab.

Krok 1. Importujte potřebné knihovny

Krok 2. Vytvořte trénovací datovou sadu

Naše datová sada se skládá z 10000 0 náhodných čísel v rozsahu 2 – 0*pi jako vstupu X a jejich odpovídající funkce sin jako vstupu Y. Všimněte si, že jsme upravili rozsah Y na rozsah od 1 do XNUMX.

Krok 3. Vytvořte neuronovou síť

Pro vytvoření neuronové sítě vytvoříme objekt modelu a přidáme k němu 3 vrstvy. To se provádí prostřednictvím API poskytované knihovnou Keras.

Počet neuronů bude 32 pro první vrstvu, 32 pro střední vrstvu a 1 pro výstup.

Použijeme aktivace relu a sigmoid.

Použitý optimalizátor je Adam a chybová funkce MSE.

Počet parametrů sítě je 1153.

Krok 4. Školení

Při trénování neuronová síť pomocí datové sady upravuje své parametry tak, aby byla chyba minimalizována.

V tomto případě jsme celou datovou sadu prošli sítí 10krát, v dávkách 32 vzorků.

Jak vidíme, na konci tréninku je chyba velmi malá, 2.5e-5.

Krok 5. Ověření

Nyní neuronovou síť naposledy otestujeme a porovnáme s očekávanými hodnotami. Jak je vidět na grafu, síť aproximuje funkci sinus docela dobře.

Krok 6. Exportujte data

Tato funkce umožňuje exportovat váhy neuronové sítě do textového souboru a následně jej načíst z SBC.

Část 2. Exekuce na SBC

Nejprve si zopakujeme implementaci neuronové sítě.

Neuronová síť je rozdělena do 4 tříd: Neural_Network, Layer, Perceptron a Activation.

Každá třída má v podstatě 1 metodu zvanou proces, která má na starosti veškerou práci a také metody načítání a ukládání.

Jedno Aktivace třída, implementuje lineární, relu, sigmoidní a tanh aktivační funkce.

Jedno perceptron třída je zodpovědná za provedení všech násobení. Všimněte si, že funkce vektorového násobení je implementována v ASM, aby nedošlo k obětování výkonu.

Implementace ASM vs Python

Násobení vektorů je zodpovědné za většinu využití CPU, takže jeho implementace na ASM umožňuje výrazně zlepšit výkon knihovny. V tomto příkladu je provedeno jednoduché vektorové násobení 100×100. Implementace pythonu trvá 1339 us, mezitím implementace ASM trvá pouze 28 us. To je asi 50x rychlejší při zachování stejných výstupních hodnot.

Jedno vrstva třída seskupuje několik perceptronů paralelně.

Třída Nervová síť shromažďuje všechny síťové vrstvy.

Nakonec můžeme zkontrolovat/zkontrolovat použití sítě.

Zkopírujeme soubor s váhami do SBC a provedeme následující main.py.

Tento kód načte síť ze souboru sine.unn a vypočítá sinus 0.123 a poté zobrazí hodnotu získanou sítí a skutečný sinus a také dobu výpočtu v mikrosekundách.

Výstup:

Jak vidíme, výstup se přibližuje očekávané hodnotě na 4 desetinná místa.

Tato síť s 1153 váhami vyžadovala 4612 (1153*4) bajtů RAM pro uložení váh v plovoucí hodnotě a 5.8 ms pro zpracování.

Pokud se vám tento obsah líbil, můžete nás sledovat X, Youtube, facebook or LinkedIn abyste byli informováni o obsahu, jako je tento.

Máte nějaké dotazy nebo požadavky?
Kontaktujte nás! Odpovíme <24 hodin!

Ikona
Kontakt ArduSimple
zavřít

Chcete se dozvědět více o GPS/RTK?

1. Náš technický tým vás bude kontaktovat, aby vyřešil jakékoli dotazy
2. Budeme vás informovat o akcích a nových produktech
3. Uslyšíte od nás pouze, když budeme mít důležité zprávy, nebudeme váš e-mail spamovat