Aktualizacja (08 / 12 / 2024): Posiadamy duży zapas wszystkich naszych produktów, znajdziesz nas również w    Kup teraz

Jak zintegrować sieć neuronową w swoim SBC

W tym artykule dowiemy się, jak zintegrować sieć neuronową w SBC. Stworzymy trójwarstwową sieć neuronową, aby przybliżyć funkcję sin(x).

Proces podzielony jest na dwie części: 1. szkolenie sieci, które zostanie wykonane na komputerze PC oraz; 2. uruchomienie sieci, co zostanie zrobione w SBC.

Część 1. Trening sieci neuronowych

W tej części użyjemy notatników Jupyter, z bibliotekami Keras, Numpy i Pylab.

Krok 1. Zaimportuj potrzebne biblioteki

Krok 2. Utwórz treningowy zbiór danych

Nasz zbiór danych składa się z 10000 liczb losowych z zakresu od 0 do 2*pi na wejściu X i odpowiadającej im funkcji sin na wejściu Y. Zauważ, że dostosowaliśmy zakres Y do zakresu od 0 do 1.

Krok 3. Utwórz sieć neuronową

Aby stworzyć sieć neuronową, tworzymy obiekt modelowy i dodajemy do niego 3 warstwy. Odbywa się to za pośrednictwem interfejsu API dostarczanego przez bibliotekę Keras.

Liczba neuronów będzie wynosić 32 dla pierwszej warstwy, 32 dla warstwy środkowej i 1 dla wyjścia.

Wykorzystamy aktywacje relu i sigmoid.

Użyty optymalizator to Adam i funkcja błędu MSE.

Liczba parametrów sieciowych to 1153.

Krok 4. Trening

Podczas uczenia sieć neuronowa wykorzystuje zbiór danych do dostosowania swoich parametrów w taki sposób, aby zminimalizować błąd.

W tym przypadku przesłaliśmy cały zestaw danych przez sieć 10 razy, w 32-próbkowych partiach.

Jak widać, pod koniec treningu błąd jest bardzo mały, 2.5e-5.

Krok 5. Weryfikacja

Teraz przetestujemy sieć neuronową po raz ostatni i porównamy ją z oczekiwanymi wartościami. Jak widać na wykresie, sieć dość dobrze przybliża funkcję sinus.

Krok 6. Eksportuj dane

Funkcja ta pozwala wyeksportować wagi sieci neuronowej do pliku tekstowego, a następnie załadować je z SBC.

Część 2. Egzekucja na SBC

Przede wszystkim przyjrzymy się implementacji sieci neuronowej.

Sieć neuronowa podzielona jest na 4 klasy: Neural_Network, Layer, Perceptron i Activation.

Każda klasa ma zasadniczo jedną metodę zwaną procesem, która jest odpowiedzialna za wykonanie całej pracy, a także za ładowanie i zapisywanie metod.

Kurs Aktywacja klasy, implementuje funkcje aktywacji liniowej, relu, sigmoidalnej i tanh.

Kurs perceptron klasa odpowiada za wykonanie wszystkich mnożeń. Zauważ, że funkcja mnożenia wektorów jest zaimplementowana w ASM, aby nie tracić wydajności.

Implementacja ASM vs Python

Mnożenie wektorów odpowiada za większość wykorzystania procesora, więc zaimplementowanie go w ASM pozwala znacznie poprawić wydajność biblioteki. W tym przykładzie wykonywane jest proste mnożenie wektora 100×100. Implementacja Pythona zajmuje 1339 nas, podczas gdy implementacja ASM zajmuje tylko 28us. Jest to około 50x szybsze przy zachowaniu tych samych wartości wyjściowych.

Kurs Warstwa klasa grupuje równolegle kilka perceptronów.

Klasa Sieć neuronowa układa wszystkie warstwy sieciowe.

Na koniec możemy przejrzeć/sprawdzić korzystanie z sieci.

Skopiujemy plik z wagami do SBC i wykonamy następujący plik main.py.

Ten kod ładuje sieć z pliku sine.unn i oblicza sinus 0.123, a następnie wyświetla wartość uzyskaną przez sieć i sinus rzeczywisty, a także czas obliczeń w mikrosekundach.

Wydajność:

Jak widać, wynik przybliża oczekiwaną wartość z 4 miejscami po przecinku.

Ta sieć, z 1153 wagami, wymagała 4612 (1153*4) bajtów pamięci RAM do przechowywania wag w wartościach zmiennoprzecinkowych i 5.8 ms do przetworzenia.

Jeśli podobały Ci się te treści, możesz nas śledzić Twitter, YouTube, Facebook or LinkedIn aby być na bieżąco z takimi treściami.

Masz pytania lub prośby?
Skontaktuj się z nami! Odpowiemy <24 godziny!

Ikona
Kontakt ArduSimple
Zamknij

Chcesz dowiedzieć się więcej o GPS/RTK?

1. Nasz zespół inżynierów skontaktuje się z Tobą w celu rozwiązania wszelkich pytań
2. Będziemy na bieżąco informować Cię o promocjach i nowościach produktowych
3. Dowiesz się od nas tylko wtedy, gdy będziemy mieć ważne wiadomości, nie będziemy spamować Twojego e-maila