Neurona Artificial Básica Función AND: Perceptron con Python
Uso de RPubs y Netlify
PROCESO DE IMPLEMENTACIÓN DE LA NEURONA ARTIFICIAL BÁSICA: PERCEPTRÓN
Se define el perceptrón
Definiremos la clase del perceptrón así como las funciones de salida y de aprendizaje del perceptrón según las siguientes fórmulas:
1.- Fórmula de salida del perceptrón
\[ y = step (\sum_{i} w_i * x_i) \] —
2.- Fórmula de aprendizaje o cálculo de pesos
\[ w_i = w_i + \alpha * (y_d -y) * x_i \]
Donde:
\(\alpha\hspace{1cm}\) Coeficiente de aprendizaje
\(x_i\hspace{1cm}\) Valor de las entradas
\(w_i\hspace{1cm}\) Valor de los pesos
Se implementa el perceptrón
class perceptron:
def __init__(inicio, n): # Damos valores iniciales a los pesos para las n entradas, se inicializa
inicio.pesos = np.random.randn(n) # la cantidad de pesos aleatorios depende del número de entradas n
inicio.n = n # almaceno el n
def salidas(inicio,entradas):
inicio.salidas_r = 1*(inicio.pesos.dot(entradas) > 0) # se realiza el cálculo de la salida según fórmula del punto 1
# producto escalar de pesos por entradas con umbral en 0
inicio.entradas = entradas
def aprendizaje(inicio, alpha, salidas_deseadas):
for i in range(0, inicio.n): # Se calcularán salidas para el rango de entradas de 0 a n
inicio.pesos[i] = inicio.pesos[i] + alpha * (salidas_deseadas - inicio.salidas_r) * inicio.entradas[i] # Cálculo de pesos según fórmula del punto 2
Se crea un Perceptrón como objeto como ejemplo para probar
perceptron_n_entradas = perceptron(5) # Creando un perceptrón de 5 entradas
perceptron_n_entradas.pesos## array([-0.66227407, -1.53815758, -0.68289287, 0.31781542, -0.5019399 ])
Se prueban las salidas del perceptrón
perceptron_n_entradas.salidas([1,0,1,1,1])
perceptron_n_entradas.salidas_r## 0
Se prueban las actualizaciones de pesos y salidas del perceptrón mediante aprendizaje
perceptron_n_entradas.aprendizaje(0.5,1) # Cambio el peso y la salida para probar aprendizaje
perceptron_n_entradas.pesos## array([-0.16227407, -1.53815758, -0.18289287, 0.81781542, -0.0019399 ])
USO DE LA NEURONA ARTIFICIAL BÁSICA: PERCEPTRÓN CON LA FUNCIÓN AND
Tabla correspondencia Función AND
| \(X_2\) | \(X_1\) | \(X_0\) | Salida |
|---|---|---|---|
| 0 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 |
Creando el Perceptrón para la función AND con 3 entradas
perceptron_AND_3ent_1sal = perceptron(3)
tabla_AND = np.array([[0,0,1,0],[0,1,1,0],[1,0,1,0],[1,1,1,1]])
n = 4
alpha = 0.5
historico_pesos = [perceptron_AND_3ent_1sal.pesos]
repes = 100
for j in range(0,repes):
for i in range(0,n):
perceptron_AND_3ent_1sal.salidas(tabla_AND[i,0:3])
perceptron_AND_3ent_1sal.aprendizaje(alpha, tabla_AND[i,3])
historico_pesos = np.concatenate((historico_pesos,[perceptron_AND_3ent_1sal.pesos]), axis=0)
Graficando las salidas del Perceptrón para la función AND con 3 entradas
mplt.plot(historico_pesos[:,0],'k')
mplt.plot(historico_pesos[:,1],'r')
mplt.plot(historico_pesos[:,2],'b')
mplt.ylabel('Estabilización Pesos')
mplt.xlabel('Aprendizaje')
mplt.title('Perceptrón Función AND')
mplt.show()CONCLUSIONES
1.- Se observa en el gráfico resultantes que los pesos tienen un intervalo de estabilización durante las repeticiones que realiza en su aprendizaje hasta que los pesos se estabilizan.
2.- El perceptrón ha aprendido la función AND.