0% encontró este documento útil (0 votos)
422 vistas35 páginas

Red Neuronal en Python para Arduino

Este documento describe cómo crear una red neuronal artificial en Python desde cero para controlar un coche robot que evita obstáculos. Se explica la arquitectura de la red neuronal propuesta, que tiene dos entradas (distancia al obstáculo y posición del obstáculo) y dos salidas (giro y dirección). También se presentan los datos de entrenamiento y el algoritmo de propagación hacia adelante y hacia atrás se utilizará para entrenar la red neuronal para que el coche robot pueda conducir de forma autónoma.

Cargado por

Kathy Hernández
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
422 vistas35 páginas

Red Neuronal en Python para Arduino

Este documento describe cómo crear una red neuronal artificial en Python desde cero para controlar un coche robot que evita obstáculos. Se explica la arquitectura de la red neuronal propuesta, que tiene dos entradas (distancia al obstáculo y posición del obstáculo) y dos salidas (giro y dirección). También se presentan los datos de entrenamiento y el algoritmo de propagación hacia adelante y hacia atrás se utilizará para entrenar la red neuronal para que el coche robot pueda conducir de forma autónoma.

Cargado por

Kathy Hernández
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 35

24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning

 

PRÁCTICA

Crear una Red Neuronal en


Python desde cero
 July 26, 2018 by Na8

Programaremos una red neuronal arti cial


en Python, sin utilizar librerías de terceros. Privacidad - Términos

[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

Entrenaremos el modelo y en pocas lineas


 
el algoritmo podrá conducir por sí mismo
un coche robot!.

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

 

Para ello, explicaremos brevemente la arquitectura de la red neuronal, explicaremos el


concepto Forward Propagation y a continuación el de Backpropagation donde ocurre “la
magia” y aprenden las neuronas.

Asumimos que se tienen conocimientos básicos de Redes Neuronales y de Python, les


recomiendo repasar algunos conceptos en los artículos:

Principales Algoritmo de ML: Redes Neuronales


Aprendizaje Profundo, una guía Rápida
Una sencilla Red Neuronal con Keras
Neural Networks Representations
VIDEO de 1 hora, clase universitaria: “Neural Networks” 
Redes Neuronales a lo largo de la historia

Comencemos con un Ejercicio Práctico

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

Este amigable coche robot Arduino, será a


quien le implantaremos nuestra red

 neuronal, para que pueda conducir sólo,


evitando los obstáculos! 
Vamos a crear una red neuronal que conduzca un coche de juguete Arduino que
más adelante construiremos y veremos en el “mundo real”.

Nuestros datos de entrada serán:

Sensor de distancia al obstáculo


si es 0 no hay obstáculos a la vista
si es 0,5 se acerca a un obstáculo
si es 1 está demasiado cerca de un obstáculo
Posición del obstáculo (izquierda,derecha)
El obstáculo es visto a la izquierda será -1
visto a la derecha será 1

Las salidas serán

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

Entrada: Entrada: Salida: Salida:


Acción de la Salida
Sensor Distancia Posición Obstáculo Giro Dirección
 
0 0 0 1 Avanzar

0 1 0 1 Avanzar

0 -1 0 1 Avanzar

0.5 1 -1 1 Giro a la izquierda

0.5 -1 1 1 Giro a la derecha

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

Esta será la arquitectura de la red neuronal propuesta:

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

 

En la imagen anterior -y durante el ejemplo- usamos la siguiente notación en las


neuronas:

1. X(i) son las entradas


2. a(i) activación en la capa 2
3. y(i) son las salidas

Y quedan implícitos, pero sin representación en la grá ca:

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”.

Los cálculos para obtener los valores de activación serán:

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

Imagen de la Curva Logística Normalizada de


Wikipedia

 
Forward Propagation -ó red Feedforward-

Con Feedforward nos referimos al recorrido de “izquierda a derecha” que hace el


algoritmo de la red, para calcular el valor de activación de las neuronas desde las
entradas hasta obtener los valores de salida.

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

Como bien sabemos, los pesos iniciales se asignan con


valores entre -1 y 1 de manera aleatoria. El desafío de este
 algoritmo, será que las neuronas aprendan por sí mismas a 
ajustar el valor de los pesos para obtener las salidas correctas.

Backpropagation (cómputo del gradiente)

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

Esta fase implica 2 pasos:

1.1 Hacer forward propagation de un patrón de entrenamiento (recordemos que es


este es un algoritmo supervisado, y conocemos las salidas) para generar las
activaciones de salida de la red.

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.

Fase 2: Actualizar Pesos:

Para cada <<sinapsis>> de los pesos:


Privacidad - Términos

[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

2.1 Multiplicar su delta de salida por su activación de entrada para obtener el


gradiente del peso.
 
2.2 Substraer un porcentaje del gradiente de ese peso

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.

En esta grá ca vemos cómo utilizamos el


gradiente paso a paso para descender y
minimizar el coste total. Cada paso utilizará
la Tasa de Aprendizaje -learning rate- que
afectará la velocidad y calidad de la red.

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):

d(3) = alayer3 – y Privacidad - Términos

[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

d(2) = OT2 d(3) . g'(zlayer2)


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.

1 [Link][i] += learning_rate * [Link](delta)

Nota: el layer en el código es realmente a(l)

El Código Completo de la red Neuronal con


Backpropagation

Aquí va el código, recuerden que lo pueden ver y descargar al nal del artículo o desde
mi cuenta de GitHub.

Primero, declaramos la clase NeuralNetwork

1 import numpy as np
2  
3 def sigmoid(x): Privacidad - Términos

4     return 1.0/(1.0 + [Link](-x))


[Link]/crear-una-red-neuronal-en-python-desde-cero/ 12/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
5  
6 def sigmoid_derivada(x):
7     return sigmoid(x)*(1.0-sigmoid(x))
8  
9
10
11

def tanh(x):
    return [Link](x)
 

12 def tanh_derivada(x):
13     return 1.0 - x**2
14  
15  
16 class NeuralNetwork:
17  
18     def __init__(self, layers, activation='tanh'):
19         if activation == 'sigmoid':
20             [Link] = sigmoid
21             self.activation_prime = sigmoid_derivada
22         elif activation == 'tanh':
23             [Link] = tanh
24             self.activation_prime = tanh_derivada
25  
26         # inicializo los pesos
27         [Link] = []
28         [Link] = []
29         # capas = [2,3,2]
30         # rando de pesos varia entre (-1,1)
31         # asigno valores aleatorios a capa de entrada y capa oculta
32         for i in range(1, len(layers) - 1):
33             r = 2*[Link]((layers[i-1] + 1, layers[i] + 1)) -1
34             [Link](r)
35         # asigno aleatorios a capa de salida
36         r = 2*[Link]( (layers[i] + 1, layers[i+1])) - 1
37         [Link](r)
38  
39     def fit(self, X, y, learning_rate=0.2, epochs=100000):
40         # Agrego columna de unos a las entradas X
41         # Con esto agregamos la unidad de Bias a la capa de entrada
42         ones = np.atleast_2d([Link]([Link][0]))
43         X = [Link]((ones.T, X), axis=1)
44         
45         for k in range(epochs):
46             i = [Link]([Link][0])
47             a = [X[i]]
48  
49             for l in range(len([Link])):
50                     dot_value = [Link](a[l], [Link][l])
51                     activation = [Link](dot_value)
52                     [Link](activation)
53             # Calculo la diferencia en la capa de salida y el valor obtenido
54             error = y[i] - a[-1]
55             deltas = [error * self.activation_prime(a[-1])]
56             
57             # Empezamos en el segundo layer hasta el ultimo
58             # (Una capa anterior a la de salida)
59             for l in range(len(a) - 2, 0, -1):
60                 [Link](deltas[-1].dot([Link][l].T)*self.activation_prime(a[l]))
61             [Link](deltas)
62  
63             # invertir
64             # [level3(output)->level2(hidden)]  => [level2(hidden)->level3(output)]
65             [Link]()
66  
67             # backpropagation
68             # 1. Multiplcar los delta de salida con las activaciones de entrada Privacidad - Términos

69             #    para obtener el gradiente del peso.


[Link]/crear-una-red-neuronal-en-python-desde-cero/ 13/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
70             # 2. actualizo el peso restandole un porcentaje del gradiente
71             for i in range(len([Link])):
72                 layer = np.atleast_2d(a[i])
73                 delta = np.atleast_2d(deltas[i])
74
75
76
  
                [Link][i] += learning_rate * [Link](delta)

            if k % 10000 == 0: print('epochs:', k)



77  
78     def predict(self, x):
79         ones = np.atleast_2d([Link]([Link][0]))
80         a = [Link](([Link](1).T, [Link](x)), axis=0)
81         for l in range(0, len([Link])):
82             a = [Link]([Link](a, [Link][l]))
83         return a
84  
85     def print_weights(self):
86         print("LISTADO PESOS DE CONEXIONES")
87         for i in range(len([Link])):
88             print([Link][i])
89  
90     def get_deltas(self):
91         return [Link]

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.

1 # funcion Coche Evita obstáculos


2 nn = NeuralNetwork([2,3,2],activation ='tanh')
3 X = [Link]([[0, 0],   # sin obstaculos
4               [0, 1],   # sin obstaculos
5               [0, -1],  # sin obstaculos
6               [0.5, 1], # obstaculo detectado a derecha
7               [0.5,-1], # obstaculo a izq
8               [1,1],    # demasiado cerca a derecha
9               [1,-1]])  # demasiado cerca a izq
10  
11 y = [Link]([[0,1],    # avanzar
12               [0,1],    # avanzar
13               [0,1],    # avanzar
14               [-1,1],   # giro izquierda
15               [1,1],    # giro derecha
16               [0,-1],   # retroceder
17               [0,-1]])  # retroceder
18 [Link](X, y, learning_rate=0.03,epochs=15001)
19  
20 index=0
21 for e in X:
22     print("X:",e,"y:",y[index],"Network:",[Link](e))
23     index=index+1

La salidas obtenidas son: (comparar los valores “y” con los de “Network” )

1 X: [0. 0.]     y: [0 1]   Network: [0.00112476   0.99987346]


2 X: [0. 1.]     y: [0 1]   Network: [-0.00936178  0.999714  ]
3 X: [ 0. -1.]   y: [0 1]   Network: [0.00814966   0.99977055]
4 X: [0.5 1. ]   y: [-1  1] Network: [-0.92739127  0.96317035] Privacidad - Términos

5 X: [ 0.5 -1. ] y: [1 1]   Network: [0.91719235   0.94992698]


[Link]/crear-una-red-neuronal-en-python-desde-cero/ 14/35
24/6/2021 Crear una Red Neuronal en Python desde cero | Aprende Machine Learning
6 X: [1. 1.]     y: [ 0 -1] Network: [-8.81827252e-04 -9.79524215e-01]
7 X: [ 1. -1.]   y: [ 0 -1] Network: [ 0.00806883  -0.96823086]

Como podemos ver son muy buenos resultados.


 
Aquí podemos ver como el coste de la función se va reduciendo y tiende a cero:

1 import [Link] as plt


2  
3 deltas = nn.get_deltas()
4 valores=[]
5 index=0
6 for arreglo in deltas:
7     [Link](arreglo[1][0] + arreglo[1][1])
8     index=index+1
9  
10 [Link](range(len(valores)), valores, color='b')
11 [Link]([0, 1])
12 [Link]('Cost')
13 [Link]('Epochs')
14 plt.tight_layout()
15 [Link]()

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

Creamos una red neuronal en pocas líneas de código Python:


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. 

Email: Your email address here

ENVIAR

Puedes hacer más ejercicios Machine Learning en Python


 en nuestra categoría d Ejercicios paso a paso por ejemplo de
Regresión Logística ó  clustering K-means ó comprender y crear
una Sencilla Red Neuronal Privacidad - Términos

[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

El código utilizado es una adaptación del original del BogoToBogo en donde se enseña


la función XOR.

Pueden descargar el código de este artículo en un Jupyter Notebook aquí o visualizar


online ó pueden acceder a mi Github.

Puedes ver la continuación de este artículo en donde aplicaremos la red neuronal a un


coche arduino! no te lo pierdas!

Lee acerca de la evolución de las redes neuronales desde 1950 hasta la actualidad

El libro del Blog

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

Precio mínimo: ¡Gratis!


Precio sugerido: 9,99 $

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

Natural Natural Building


Language... Language... Chatbots with...
EUR 37,44 EUR 38,06 EUR 31,72

Comprar ahora Comprar ahora Comprar ahora

Algoritmos Ejercicio Jupyter Notebook Machine Learning Modelos

Python Redes Neuronales

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

CLASIFICAR CON K-NEAREST-NEIGHBOR EJEMPLO EN PYTHON

 
PROGRAMA UN COCHE ARDUINO CON INTELIGENCIA ARTIFICIAL

36 comments

befama · July 27, 2018

Buen, tema. Espero pronto construir el coche arduino. Saludos y gracias por
el blog.

Reply

Na8 · July 27, 2018

Gracias por seguir visitando el blog! Espero publicar el siguiente


artículo con la red Neuronal funcionando en arduino la semana
que viene o máximo 14 días! En casa ya lo tengo funcionando

Reply

J.C.Vázquez · November 28, 2019

Hola. Lindo ejemplo. Creo que puede haber un error al


calcular la derivada de la tanh.
Privacidad - Términos

[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

Anonimo · July 28, 2018

Enhorabuena amigo, por tan especial blog, con este tema emergente

Reply

Mario González · September 4, 2018

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.

De todas formas buen post e idea de difundir el aprendizaje de redes


neuronales. Privacidad - Términos

[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

 Rafael Guerrero · September 12, 2018



la red se entrena una sola vez, o cada vez que se prenda el carrito ?

Reply

Na8 · September 12, 2018

Una vez creada la red en Python y entrenada (1 sola


vez), obtenemos los pesos óptimos de las conexiones
entre las capas, y estos valores son los que copiamos
en el código arduino. Pero esa red, YA está entrenada,
es decir, que ya funciona bien y no es necesario seguir
entrenando.

Reply

Rafael Guerrero · September 11, 2018

Saludos,

Excelente ejemplo!

cual fue el determinante para de nir solo una capa oculta con 3 neuronas

como de nes la cantidad de capas ocultas y el numero de neuronas en las


capas ocultas
Privacidad - Términos

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

Na8 · September 12, 2018

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

Rafael Guerrero · September 13, 2018

ooooOOOOOOh!…. excelente, gracias por tu respuesta

si a tu ejemplo agarro y modi co el numero de


neuronas (entradas, capas ocultas y salidas)

y paso unos datos de prueba debería funcionar


tambien o aproximarse a lo que estoy buscando ?

o depende tambien del tipo de función que tiene cada


neurona ?

Reply

Na8 · September 25, 2018

Si modi cas capas y cantidad de


neuronas, deberías obtener buenos
resultados, siempre y cuando no caigas en
Over tting ó Under tting. En cuanto a la
función, por lo general se utiliza la misma
función en una misma capa (por ejemplo
ReLu) y en toda la red, o puede que se
cambie la función en la capa de entrada y
salida (por ejemplo para una salida Privacidad - Términos

[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

SoftMax para clasi car resultados


mutuamente excluyentes).
 Reply 

Nagib · October 15, 2018

hola te comento que el link de github cayo no puedo acceder al código de


referencia

Reply

Na8 · October 16, 2018

Hola Nagib, acabo de comprobar y me funcionan correctamente


todos los enlaces. Te dejo aquí nuevamente el link al código en
Github. Dime si te funciona correctamente por favor. Saludos y
gracias por escribir!

Reply

Nagib Vallejos Mamani · November 9, 2018

Ahora si pude tener el acceso, muchas gracias, sigo tu


página semana a semana, segui adelante y exitos.

Reply

Na8 · November 9, 2018

Me alegro!, gracias a ti! Sigamos adelante

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

 Alfredo · April 21, 2019



Ayer descubrí tu blog por casualidad, y he estado leyendo varios de tus
artículos. Me gustan porque explicas las cosas y das enlaces de tus
explicaciones. Ya me he suscrito a tu blog.
Sigue así, muy buen trabajo.

Reply

Na8 · April 28, 2019

Hola Alfredo!, un gusto conocerte. Espero que te sigan gustando los


próximos artículos!. Saludos!

Reply

Jose Flores Bendezú · May 9, 2019

Gracias Maestro como siempre tu codigo funciona, y tus explicaciones son a


todo dar, gracias a ti estoy aprendiendo este maravilloso mundo del learning,
un fuerte abrazo donde te encuentres

Reply Privacidad - Términos

[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

Na8 · May 16, 2019

Hola Jose Flores, muchas gracias por el ánimo! Procuraré seguir


 escribiendo artículos! Saludos y cualquier cosa me dices! 
Reply

Jose Felipe Castellot · July 5, 2019

Estimado Juan Ignacio, muchas felicidades por tu conocimiento y contribución


a la comunidad, éste tema en particular me parece muy interesante,
prácticamente se puede resolver casi cualquier problema, esperemos ver más
artículos tuyos, por cierto tengo una duda, perdón por mi ignorancia, estoy
apenas comenzando a meterme en el tema, veo que la función de la derivada
de la tangente hiperbólica es 1 – X2, pero que no debería de ser 1 –
(tanh(x))2, quedo en espera de tu amable respuesta. Gracias y Saludos
cordiales.

Reply

Rodolfo · October 8, 2019

Gracias por el aporte de verdad me ha servido para entender más del


backpropagation. Aún estoy un poco perdido, entiendo que sólo funciona
cuando se tiene 2 entradas y dos salidas? Si uno desea aumentar las entradas Privacidad - Términos

[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

y salidas…arrojaría un error en la función t()…cuál sería la opción para


solucionar eso. Gracias nuevamente
 Reply 

Danny Xie · October 29, 2019

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

Luis · November 22, 2019

Buenos días. He visto en la grá ca de arriba “coste y épocas” que el coste


tiende a cero a más épocas. Con más de 14000 epochs, ¿habría over tting?
Buen blog
Gracias

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

 Luis · November 22, 2019



Buenos días. He visto en la grá ca de arriba “coste y épocas” que el coste
tiende a cero a más épocas. Con más de 14000 epochs, ¿habría over tting?
Buen blog
Gracias

Reply

Oscar Noel Amaya Garcia · January 24, 2020

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.

Calculo la diferencia en la capa de salida y el valor obtenido

error = y[i] – a[-1]


deltas = [error * self.activation_prime(a[-1])]

No deberia utilizarse la derivada de la funcion de coste en lugar del


coste(error) directamente para obtener el gradiente?

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

 David · April 9, 2020



Saludos hermano, ¿este código tiene derechos de autor?. Es posible que le
haga algunas modi caciones para darle otra aplicación distinta al carrito
arduino.

Gracias y a la espera de tu respuesta

Reply

Na8 · May 23, 2020

Hola David gracias por escribir. Este código está en Github y es


de uso libre! Puedes modi carlo y usarlo.
Si llegas a publicar en algún otro sitio te pediría si puedes enlazar
con mi web como referencia.
Saludos!

Reply

ingae ingae · April 20, 2020

Hola, cuando cambias la función de activación de tanh a sigmoid, el algoritmo


no aprende.

Saludos.

Reply Privacidad - Términos

[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

 Angelquiet · May 13, 2020



Excelente trabajo!!. Una pregunta, ¿se puede realizar este trabajo usando las
librerías de keras?

Reply

Na8 · May 23, 2020

Hola Si, claro, sería una red bien sencilla, usando secuencial y
una capa! Saludos

Reply

Arturo2000 · June 11, 2020

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.

Mi duda es que la función de regresión lineal es matriz de datos de entrada


por matriz de pesos sinápticos más bias X×W+bias.

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

Como es que esta operación es equivalente a la que realizas tu modi cando


el tamaño de la matriz de pesos sinápticos porqué añades una neurona de
 bias? 
Reply

Arturo2000 · June 11, 2020

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.

Mi duda es que la función de regresión lineal es matriz de datos de entrada


por matriz de pesos sinápticos más bias X×W+bias.

Como es que esta operación es equivalente a la que realizas tu modi cando


el tamaño de la matriz de pesos sinápticos porqué añades una neurona de
bias?

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

No tiene un libro sobre cómo crear redes ndneuronales y que matemamatem


 se necesitan 
Mi whats 3316086911

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?

He dicho WordPress porque en principio es lo más sencillo a nivel de crear la


interfaz, pero no sé si estoy en lo cierto.

¡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:

tan = lambda x: [Link](x)

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

Excelente trabajo, muy practico.. Me costo entender la matriz de pesos, ya


 que no me había percatado que la bia que utilizas en las capas intermedia
 es
usada como neurona conectada a las neuronas de la capa anterior.

Reply

Leave a Reply
Enter your comment here...

Visita nuestra Guía de Aprendizaje

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!

Email: Your email address here

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

Proudly powered by WordPress | Theme: Eighties by Justin Kopepasah.


 

Privacidad - Términos

[Link]/crear-una-red-neuronal-en-python-desde-cero/ 35/35

También podría gustarte