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.