Red Neuronal en Python para Arduino
Red Neuronal en Python para Arduino
PRÁCTICA
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 1/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 2/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 3/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 4/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Girar
derecha 1 / izquierda -1
Dirección
avanzar 1 / retroceder -1
La velocidad del vehículo podría ser una salida más (por ejemplo disminuir la velocidad
si nos aproximamos a un objeto) y podríamos usar más sensores como entradas pero
por simpli car el modelo y su implementación mantendremos estas 2 entradas y 2
salidas.
Para entrenar la red tendremos las entradas y salidas que se ven en la tabla: Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 5/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
0 1 0 1 Avanzar
0 -1 0 1 Avanzar
0.5 0 0 1 Avanzar
1 1 0 -1 Retroceder
1 -1 0 -1 Retroceder
1 0 0 -1 Retroceder
-1 0 0 1 Avanzar
-1 -1 0 1 Avanzar
-1 1 0 1 Avanzar
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 6/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
1. O(j) Los pesos de las conexiones entre neuronas será una matriz que mapea la
capa j a la j+1
2. Recordemos que utilizamos 1 neurona extra en la capa 1 y una neurona extra en
la capa 2 a modo de Bias -no están en la grá ca- para mejorar la precisión de la
red neuronal, dandole mayor “libertad algebraica”.
a(1) = g(OT1X)
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 7/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
a(2) = g(OT2X)
a(3) = g(OT3X)
*Nota: la T indica matriz traspuesta, para poder hacer el producto
En las ecuaciones, la g es una función Sigmoide que re ere al caso especial de función
logística y de nida por la fórmula:
g(z) = 1/(1+e-z)
Funciones Sigmoide
Una de las razones para utilizar la función sigmoide –función Logística– es por sus
propiedades matemáticas, en nuestro caso, sus derivadas. Cuando más adelante la red
neuronal haga backpropagation para aprender y actualizar los pesos, haremos uso de
su derivada. En esta función puede ser expresada como productos de f y 1-f . Entonces
f'(t) = f(t)(1 – f(t)). Por ejemplo la función tangente y su derivada arco-tangente se
utilizan normalizadas, donde su pendiente en el origen es 1 y cumplen las propiedades.
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 8/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Forward Propagation -ó red Feedforward-
Si usamos notación matricial, las ecuaciones para obtener las salidas de la red serán:
X = [x0 x1 x2]
zlayer2 = O1X
alayer2 = g(zlayer2)
zlayer3 = O2alayer2
y = g(zlayer3)
Resumiendo: tenemos una red; tenemos 2 entradas, éstas se multiplican por los pesos
de las conexiones y cada neurona en la capa oculta suma esos productos y les aplica la
función de activación para “emitir” un resultado a la siguiente conexión (concepto
conocido en biología como sinapsis química).
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 9/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Al hacer backpropagtion es donde el algoritmo itera para aprender! Esta vez iremos
de “derecha a izquierda” en la red para mejorar la precisión de las predicciones. El
algoritmo de backpropagation se divide en dos Fases: Propagar y Actualizar Pesos.
Fase 1: Propagar
1.2 Hacer backward propagation de las salidas (activación obtenida) por la red
neuronal usando las salidas “y” reales para generar los Deltas (error) de todas las
neuronas de salida y de las neuronas de la capa oculta.
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 10/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
El porcentaje que utilizaremos en el paso 2.2 tiene gran in uencia en la velocidad y calidad
del aprendizaje del algoritmo y es llamado “learning rate” ó tasa de aprendizaje. Si es una
tasa muy grande, el algoritmo aprende más rápido pero tendremos mayor imprecisión
en el resultado. Si es demasiado pequeño, tardará mucho y podría no nalizar nunca.
Deberemos repetir las fases 1 y 2 hasta que la performance de la red neuronal sea
satisfactoria.
Si denotamos al error en el layer “l” como d(l) para nuestras neuronas de salida en layer
3 la activación menos el valor actual será (usamos la forma vectorial):
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 11/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
g'(zlayer2) = alayer2 . (1 – alayer2)
Al n aparecieron las derivadas! Nótese que no tendremos delta para la capa 1, puesto
que son los valores X de entrada y no tienen error asociado.
El valor del costo -que es lo que queremos minimizar- de nuestra red será
J = alayer dlayer + 1
Usamos este valor y lo multiplicamos al learning rate antes de ajustar los pesos. Esto
nos asegura que buscamos el gradiente, iteración a iteración “apuntando” hacia el
mínimo global.
Aquí va el código, recuerden que lo pueden ver y descargar al nal del artículo o desde
mi cuenta de GitHub.
1 import numpy as np
2
3 def sigmoid(x): Privacidad - Términos
Y ahora creamos una red a nuestra medida, con 2 neuronas de entrada, 3 ocultas y 2 de
salida. Deberemos ir ajustando los parámetros de entrenamiento learning rate y la
cantidad de iteraciones “epochs” para obtener buenas predicciones.
La salidas obtenidas son: (comparar los valores “y” con los de “Network” )
Y podemos ver los pesos obtenidos de las conexiones con nn.print_weights() pues
estos valores serán los que usaremos en la red nal que en un próximo artículo
implementaremos en Arduino para que un coche-robot conduzca sólo evitando
obstáculos.
Conclusión
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 15/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
comprendimos cómo funciona una red neuronal “básica”,
el porqué de las funciones Sigmoides y sus derivadas que …
nos permiten hacer Backpropagation,
hallar el gradiente para minimizar el coste,
reducir el error iterando y obtener las salidas buscadas,
logrando que la red aprenda por sí misma en base a un conjunto de datos de
entrada y sus salidas como “buen” Algoritmo Supervisado que es.
Nos queda como proyecto futuro aplicar esta red que construimos en el mundo real y
comprobar si un coche Arduino será capaz de conducir por sí mismo y evitar
obstáculos..! (en el próximo artículo lo veremos en acción!)
Suscripción al Blog
Como siempre, te invito a suscribirte al Blog y recibir los artículos cada 15 días.
ENVIAR
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 16/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Recursos
Si tienes que armar tu ambiente de Programación Python puedes hacerlo siguiendo los
pasos de este artículo: Instalar ambiente de Desarrollo Python con Anaconda
Lee acerca de la evolución de las redes neuronales desde 1950 hasta la actualidad
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 17/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Aprende Machine
Learning en
Español
Teoría + Práctica
Python
Juan Ignacio Bagnato
Consíguelo gratis
Este artículo y todos los demás en el libro del blog . Aún está en borrador, pero
apreciaré mucho tu colaboracón! Contiene Extras descargables como el “Lego Dataset”
utilizado en el artículo de Detección de Objetos.
Producto Relacionado
ELEGOO UNO
R3 Kit de...
EUR 73,99
Comprar ahora
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 18/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Comparte el artículo:
6
Relacionado
Una sencilla Red Neuronal en Breve Historia de las Redes Principales Algoritmos usados en
Python con Keras y Tensor ow Neuronales Arti ciales Machine Learning
Libros Relacionados
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 19/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
PROGRAMA UN COCHE ARDUINO CON INTELIGENCIA ARTIFICIAL
36 comments
Buen, tema. Espero pronto construir el coche arduino. Saludos y gracias por
el blog.
Reply
Reply
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 20/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
def tanh_derivada(x):
return 1.0 – x2
Creo que debería ser:
def tanh_derivada(x):
return 1.0 – tanh(x)2
Saludos.
Reply
Enhorabuena amigo, por tan especial blog, con este tema emergente
Reply
Pienso que sería mejor utilizar una base de datos de entrenamiento “real” ya
que la utilizada consta sólo de 7 datos hechos a mano, para los cuales
programar especí camente las instrucciones entrada-salida es muy fácil de
hacer, por lo cual se hace innecesario entrenar una red.
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 21/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Reply
Reply
Reply
Saludos,
Excelente ejemplo!
cual fue el determinante para de nir solo una capa oculta con 3 neuronas
Reply
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 22/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
A decir verdad, para este caso fue prueba y error. Existen algunas
“reglas a ojo” (en inglés thumb-rule) comparto este enlace donde
se comentan varias: Thumb rules to determine number of hidden
layers and cells.
Reply
Reply
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 23/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Reply
Reply
Reply
Reply
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 24/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Reply
Reply
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 25/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Reply
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 26/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Hola, tu blog es muy bueno ! Tengo una pregunta ! Al ser tres capas una de
entrada con dos neuronas, una oculta con 3 nodos y una de salida on dos
nodos, no debería tener 2 sets de pesos? Uno para la capa de entrada a la
capa oculta y una para la capa oculta a la capa de salida?
Reply
Reply
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 27/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Reply
Hola Ignacio.
En la implementacino de backpropagation de tu algoritmo el delta
directamente multiplicando el error por la derivada de la activacion de la capa
anterior.
Reply
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 28/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Reply
Reply
Saludos.
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 29/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Reply
Hola Si, claro, sería una red bien sencilla, usando secuencial y
una capa! Saludos
Reply
Hola, tengo una duda que no consigo entender y me tiene confundido. Para
realizar la operación de regresión lineal que realiza cada neurona, tu incluyes
una neurona de bias en cada capa menos en la de salida, con lo que se te
queda una matriz de pesos de tamaño n neuronas +1 en tu caso 3×4 la
primera capa 4×8 la capa intermedia. Dichas matrices las multiplicas con la
matriz de datos de entrada y el resultado lo pasas por la activación.
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 30/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Hola, tengo una duda que no consigo entender y me tiene confundido. Para
realizar la operación de regresión lineal que realiza cada neurona, tu incluyes
una neurona de bias en cada capa menos en la de salida, con lo que se te
queda una matriz de pesos de tamaño n neuronas +1 en tu caso 3×4 la
primera capa 4×8 la capa intermedia. Dichas matrices las multiplicas con la
matriz de datos de entrada y el resultado lo pasas por la activación.
Reply
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 31/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Daniel · September 2
Reply
Lucía · January 21
¡Hola! Una vez que la red estuviera lista, ¿cómo podríamos integrarla en una
solución como WordPress para poder utilizarla?
¡Muchas gracias!
Reply
Emmanuel · February 28
Hola, muy bueno el ejemplo, pero creo que algunas cosas se pueden
simpli car.
por ejemplo al decir
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 32/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
def tan(x):
return [Link](x)
se puede usar la función lambda que python ya trae para crear una función
anónima:
Y se usaría:
tan(0)
0
Esta función fue diseñada para ser simple y rápida, solo ocupa una línea, así
que no es para usarse en funciones grandes con otras funciones dentro. Pero
la mayor ventaja que tienen es que pueden guardarse en cualquier tipo de
variable (arreglos, toupla, diccionarios), con esto último puedes eliminar un
par de lineas de código.
Reply
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 33/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Ricardo · March 6
Reply
Leave a Reply
Enter your comment here...
Buscar
Search …
Contacto
Suscripción
Recibe los artículos de Aprende Machine Learning en tu casilla de correo. Cada 15 días y sin Spam!
ENVIAR
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 34/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
Privacidad - Términos
[Link]/crear-una-red-neuronal-en-python-desde-cero/ 35/35