Pierwszym przykładem będzie mało przydatna w praktyce, ale idealna, jako przykład startowy sieć realizująca działanie funkcji XOR. Na początku przygotujemy dane szkoleniowe i utworzymy model sieci oraz wytrenujemy jej wagi w pakiecie TensorFlow. Następnie wygenerujemy model TensorFlow lite i na jego podstawie otrzymamy kod dla mikrokontrolera STM32.
Uczymy sieć
Do trenowania sieci zastosujemy środowisko Google Colab [1]. Możemy tam tworzyć notatniki i uruchamiać je w chmurze. Dzięki temu mamy już zainstalowane potrzebne biblioteki. Cały kod użyty w projekcie znajduje się w [2]. Na listingu pokazano kod odpowiedzialny za importowanie bibliotek, z których będziemy korzystać. Są to moduły:
- TensorFlow, który dostarcza funkcji dla sieci neuronowych,
- NumPy odpowiadający za efektywne obliczenia numeryczne.
Dla sprawdzenia wyświetlamy wersję TensorFlow. Ja używałem wersji 2.8.2.
Kolejnym krokiem jest przygotowanie treningowego zbioru danych. Ponieważ w naszym przypadku mamy tylko 4 punkty, dla których będziemy używać naszej sieci, to będą one zarówno zbiorem treningowym jak i użytym do oceny modelu. Zarówno wejścia jak i wyjścia naszej sieci będą liczbami zmiennoprzecinkowymi typu float32. Przyjmiemy więc, że stan 0 zakodujemy jako –127, a 1 jako +127. Natomiast stan wyjścia będziemy oceniać na podstawie znaku. Zero i więcej będą odpowiadać logicznej 1, natomiast liczby ujemne będą interpretowane jako 0.
Dla naszego zadania wystarczyłaby mniejsza sieć, ale wtedy algorytm uczenia miałby problem ze znalezieniem satysfakcjonujących nas wag. Moglibyśmy je dobrać ręcznie (co dla naszego małego przypadku byłoby proste).