Introducción a las Redes Neuronales Pt. II
Implementación de un perceptrón en Python
Antes de comenzar es necesario tener conocimiento básicos en python (3.6) y la librería numpy.
Introducción
En el post anterior de “Introducción a las Redes Neuronales Pt. 1" se explicaron los conceptos básicos que conforman al mundo de las redes neuronales, donde partimos del modelo de un perceptrón que es la parte fundamental una red neuronal.
Para este segundo post haremos la implementación del perceptrón en el lenguaje de programación Python en su versión 3.6.8 utilizando el paradigma de programación orientado a objetos.
Primero retomamos el modelo del perceptrón y el ejemplo de la compuerta lógica AND, donde obtenemos verdadero (1) si los dos casos de entrada son verdaderos (1) en caso contrario se obtiene falso (0).
Modelo de un perceptron
- Señales de entrada: Estos pueden ser valores booleanos, reales o valores enteros + un valor b el caul es llamado bias.
- Pesos sinápticos: Se generan pesos aleatorios en el rango [-1,1] para dos entradas dadas.
- Unión Sumatoria: Se realiza la suma ponderada de entradas con pesos + bias.
- Función de activación: Indica si una salida se dispara hacia arriba o hacia abajo de acuerdo a con la función de activación elegida.
- Salida: Se realiza la comparación de la salida del perceptrón con la salida deseada.
Compuerta lógica AND
Comencemos a programar!
La programación del perceptrón se realizará siguiendo los procesos del modelo presentado.
Estructura del proyecto python
Paso 1: Definición de las entradas (de la compuerta AND)
Las entradas del perceptrón es una matriz de entradas más el valor bias (archivo main.py).
Definición de las salidas (de la compuerta AND)
Creación de la clase Perceptrón
Lo primero es importar el modulo de numpy para poder convertir nuestra matriz de entrada en un arreglo de numpy y poder trabajarlo de manera más fácil. Enseguida creamos la clase Perceptron el cual recibirá la matriz de entrada y el arreglo de salidas las cuales serán convertidas a arreglos numpy al instanciar la clase Perceptron.
Ahora crearemos un método nombrado Fit (se refiere al entrenamiento del perceptrón). Primero definimos dos variables: épocas y num_inputs, el número de épocas indica el tiempo en épocas que se tardo el perceptrón en aprender las entradas encontrando los mejores pesos, y para el caso de num_inputs es una variable de control que sirve para detener el ciclo while, esta condición se cumple cuando el numero de salidas esperadas sea igual al número de salidas obtenidas.
Paso 2: Generación de pesos aleatorios en el rango [-1,1].
Paso 3: Unión sumatoria o suma ponderada de las entradas por los pesos.
Recorremos la matriz de entradas, la matriz de pesos y el vector de salidas. La función zip nos permite recorrer multiples estructuras en una sola corrida.
Para realiza la suma ponderada utilizamos el operador @ que nos permite realizar la sumatoria de las entradas por los pesos.
Paso 4: Función de activación
La función de activación más utilizada es la función sigmoide. El funcionamiento es que si el resultado de la suma ponderada es menor a 0 la salida resultante es 0 y si el resultado de la suma ponderada es mayor a 0 entonces la salida resultante es 1.
Paso 5 Salida: Comparación de salidas obtenidas con salidas esperadas
Ejecución
En esta ejecución el perceptrón se tardo 5 épocas en aprender las entradas y encontrar los mejores pesos. Esto puede varia en cada ejecución.
Link del repositorio: https://github.com/ugarciac/PerceptronPython
Dudas, Comentarios, Críticas constructivas
Twitter: @ugarciacal
Facebook: Ulises GC