Cómo integrar una Red Neuronal en tu SBC

En este artículo aprenderemos a integrar una red neuronal en el SBC. Crearemos una red neuronal de 3 capas para aproximar la función sin(x).

El proceso se divide en dos partes: 1. capacitación de la red, que se realizará en la PC y; 2. funcionamiento de la red, que se realizará en el SBC.

Parte 1. Entrenamiento de redes neuronales

Para esta parte utilizaremos notebooks Jupyter, con las librerías Keras, Numpy y Pylab.

Paso 1. Importa las bibliotecas necesarias

Paso 2. Crear el conjunto de datos de entrenamiento

Nuestro conjunto de datos consiste en 10000 números aleatorios en el rango 0 – 2*pi como entrada X y su función sin correspondiente como entrada Y. Tenga en cuenta que hemos ajustado el rango de Y para que varíe de 0 a 1.

Paso 3. Crea la red neuronal

Para crear la red neuronal, creamos un objeto modelo y le agregamos 3 capas. Esto se hace a través de la API proporcionada por la biblioteca de Keras.

El número de neuronas será 32 para la primera capa, 32 para la capa intermedia y 1 para la salida.

Usaremos las activaciones relu y sigmoid.

El optimizador utilizado es Adam y la función de error MSE.

El número de parámetros de red es 1153.

Paso 4. Entrenamiento

Al entrenar, la red neuronal usa el conjunto de datos para ajustar sus parámetros de tal manera que se minimice el error.

En este caso, pasamos el conjunto de datos completo a través de la red 10 veces, en lotes de 32 muestras.

Como podemos ver, al final del entrenamiento, el error es muy pequeño, 2.5e-5.

Paso 5. Verificación

Ahora probaremos la red neuronal por última vez y la compararemos con los valores esperados. Como se ve en el gráfico, la red se aproxima bastante bien a la función seno.

Paso 6. Exportar los datos

Esta función le permite exportar los pesos de la red neuronal a un archivo de texto y luego cargarlo desde el SBC.

Parte 2. Ejecución en el SBC

En primer lugar, revisaremos la implementación de la red neuronal.

La red neuronal se divide en 4 clases: Neural_Network, Layer, Perceptron y Activation.

Cada clase básicamente tiene 1 método llamado proceso que se encarga de hacer todo el trabajo, así como cargar y guardar métodos.

Los programas Activación class, implementa las funciones de activación linear, relu, sigmoid y tanh.

Los programas Perceptron la clase es responsable de realizar todas las multiplicaciones. Tenga en cuenta que la función de multiplicación de vectores se implementa en ASM para no sacrificar el rendimiento.

Implementación de ASM frente a Python

La multiplicación de vectores es responsable de la mayor parte del uso de la CPU, por lo que implementarla en ASM permite mejorar mucho el rendimiento de la biblioteca. En este ejemplo, se realiza una simple multiplicación de vectores de 100 × 100. Una implementación de python toma 1339 us, mientras que la implementación de ASM solo toma 28 us. Esto es aproximadamente 50 veces más rápido y conserva los mismos valores de salida.

Los programas Ponedora la clase agrupa algunos perceptrones en paralelo.

La clase Red neuronal apila todas las capas de la red.

Finalmente, podemos revisar/comprobar el uso de la red.

Copiaremos el archivo con los pesos al SBC y ejecutaremos el siguiente main.py.

Este código carga la red desde el archivo sine.unn y calcula el seno de 0.123 y luego muestra el valor obtenido por la red y el seno real, así como el tiempo de cálculo en microsegundos.

Salida:

Como vemos, la salida se aproxima al valor esperado con 4 decimales.

Esta red, con 1153 pesos, requería 4612(1153*4) bytes de RAM para almacenar pesos en valor flotante y 5.8 ms para procesar.

¿Quieres saber más sobre GPS/RTK?

1. Nuestro equipo de ingeniería se pondrá en contacto contigo para resolver cualquier duda
2. Lo mantendremos informado sobre promociones y lanzamientos de nuevos productos.
3. Solo sabrá de nosotros cuando tengamos noticias importantes, no enviaremos spam a su correo electrónico.