Обновление (13 / 06 / 2026): У нас есть большой запас всех наших продуктов, найти нас также в и    Как получить расценки

Как интегрировать нейронную сеть в ваш SBC

В этой статье мы узнаем, как интегрировать нейронную сеть в SBC. Мы создадим трехслойную нейронную сеть для аппроксимации функции sin(x).

Процесс делится на две части: 1. обучение сети, которое будет производиться на ПК и; 2. запуск сети, который будет выполняться в SBC.

Часть 1. Обучение нейронной сети

В этой части мы будем использовать блокноты Jupyter с библиотеками Keras, Numpy и Pylab.

Шаг 1. Импортируйте необходимые библиотеки

Шаг 2. Создайте обучающий набор данных

Наш набор данных состоит из 10000 0 случайных чисел в диапазоне 2–0*pi в качестве входных данных X и соответствующих им функций греха в качестве входных данных Y. Обратите внимание, что мы скорректировали диапазон Y в диапазоне от 1 до XNUMX.

Шаг 3. Создайте нейронную сеть

Для создания нейронной сети мы создаем объект модели и добавляем к нему 3 слоя. Это делается через API, предоставляемый библиотекой Keras.

Количество нейронов будет 32 для первого слоя, 32 для среднего слоя и 1 для выхода.

Мы будем использовать активацию relu и sigmoid.

В качестве оптимизатора используется Adam и функция ошибки MSE.

Количество сетевых параметров 1153.

Шаг 4. Обучение

При обучении нейронная сеть использует набор данных для настройки своих параметров таким образом, чтобы минимизировать ошибку.

В этом случае мы передали весь набор данных через сеть 10 раз партиями по 32 выборки.

Как видим, в конце обучения погрешность совсем небольшая, 2.5е-5.

Шаг 5. Проверка

Теперь мы проверим нейронную сеть в последний раз и сравним ее с ожидаемыми значениями. Как видно на графике, сеть довольно хорошо аппроксимирует синусоидальную функцию.

Шаг 6. Экспорт данных

Эта функция позволяет экспортировать веса нейронной сети в текстовый файл, а затем загружать его из SBC.

Часть 2. Исполнение на SBC

В первую очередь рассмотрим реализацию нейронной сети.

Нейронная сеть разделена на 4 класса: Neural_Network, Layer, Perceptron и Activation.

Каждый класс в основном имеет 1 метод, называемый процессом, который отвечает за выполнение всей работы, а также за загрузку и сохранение методов.

Активация класс реализует функции активации linear, relu, sigmoid и tanh.

Перцептрон class отвечает за выполнение всех операций умножения. Обратите внимание, что функция векторного умножения реализована в ASM, чтобы не жертвовать производительностью.

Реализация ASM против Python

Умножение векторов отвечает за большую часть загрузки ЦП, поэтому реализация его на ASM позволяет значительно повысить производительность библиотеки. В этом примере выполняется простое векторное умножение 100×100. Реализация Python занимает 1339 мкс, в то время как реализация ASM занимает всего 28 мкс. Это примерно в 50 раз быстрее при сохранении тех же выходных значений.

Слой класс группирует несколько персептронов параллельно.

Класс Нейронная сеть складывает все слои сети.

Наконец, мы можем просмотреть/проверить использование сети.

Мы скопируем файл с весами на SBC и выполним следующий main.py.

Этот код загружает сеть из файла sine.unn и вычисляет синус 0.123, а затем отображает полученное сетью значение и реальный синус, а также время расчета в микросекундах.

Результат:

Как мы видим, вывод приближает ожидаемое значение с 4 знаками после запятой.

Эта сеть с 1153 весами требовала 4612 (1153 * 4) байт ОЗУ для хранения весов в виде значений с плавающей запятой и 5.8 мс для обработки.

Если вам понравился этот контент, вы можете подписаться на нас в Twitter, YouTube, Facebook or LinkedIn чтобы оставаться в курсе подобного контента.

Есть вопросы или пожелания?
Связаться с нами! Мы ответим <24 часов!

Значок
Контакты ArduSimple
Закрыто
ArduSimple – Высокоточное RTK-оборудование и решения для геодезических работ, упрощенные в использовании

Хотите узнать больше о GPS и RTK?

Если вы сейчас заняты, наши инженеры могут отправить вам 3 коротких электронных письма, в которых подробно объяснят все, что вам нужно знать для начала вашего проекта.