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: (“Writing Functions and Scripts,” 2017)

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.23373858, -0.33520547,  1.77553427, -1.52797002,  1.16427955])

Se prueban las salidas del perceptrón


perceptron_n_entradas.salidas([1,0,1,1,1])

perceptron_n_entradas.salidas_r
## 1

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.23373858, -0.33520547,  1.77553427, -1.52797002,  1.16427955])

USO DE LA NEURONA ARTIFICIAL BÁSICA: PERCEPTRÓN CON LA FUNCIÓN AND

Tabla correspondencia Función AND


\[ \begin{array}{|c|c|c|c|} \hline X_{1} & X_{1} & X_{2} & \text { Salida } \\ \hline 0 & 0 & 1 & 0 \\ \hline 0 & 1 & 1 & 0 \\ \hline 1 & 0 & 1 & 0 \\ \hline 1 & 1 & 1 & 1 \\ \hline \end{array} \]


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.


Bibliografía

Writing functions and scripts. (2017). In A data scientist’s guide to acquiring, cleaning and managing data in r (pp. 143–170). John Wiley & Sons, Ltd. doi: https://doi.org/10.1002/9781119080053.ch5
LS0tDQp0aXRsZTogIioqX05ldXJvbmEgQXJ0aWZpY2lhbCBCw6FzaWNhIEZ1bmNpw7NuIEFORDogUGVyY2VwdHJvbiBjb24gUHl0aG9uXyoqIg0KYXV0aG9yOiAiSmVzw7pzIENoaXJpbm9zIg0KZGF0ZTogIjIwMjIvMDcvMjUiDQpzdWJ0aXRsZTogVXNvIGRlIFJQdWJzIHkgTmV0bGlmeQ0KaW5zdGl0dXRlOiBEYXRhIFNjaWVuY2UgUmVzZWFyY2ggUGVyw7oNCnBob25lOiAnKzUxOTc1NDM1NjExJw0KZW1haWw6IGNoaXJpbm9zLmphQHB1Y3AuZWR1LnBlDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOg0KICAgIGhpZ2hsaWdodDogcnN0dWRpbw0KICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQpjc2w6IGFwYS1vbGQtZG9pLXByZWZpeC5jc2wNCmJpYmxpb2dyYXBoeTogYmlibGlvZ3JhZmlhLmJpYiAgDQotLS0NCg0KIyMgKipfUFJPQ0VTTyBERSBJTVBMRU1FTlRBQ0nDk04gREUgTEEgTkVVUk9OQSBBUlRJRklDSUFMIELDgVNJQ0E6IFBFUkNFUFRSw5NOXyoqDQoNCmBgYHtyIHNldHVwMSxpbmNsdWRlPUZBTFNFfQ0KDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQoNCmBgYA0KDQo8IS0tIFNlIGNhcmdhbiBsYXMgbGlicmVyw61hcyBxdWUgdXRpbGl6YXJlbW9zIHBhcmEgbG9zIGPDoWxjdWxvcyAobnVtcHkpIHkgcGFyYSBsb3MgZ3LDoWZpY29zIChtYXRwbG90bGliKSAtLT4NCg0KYGBge3B5dGhvbiBzZXR1cDIsIGluY2x1ZGU9RkFMU0V9DQoNCmltcG9ydCBudW1weSBhcyBucA0KDQppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgbXBsdA0KDQpgYGANCg0KIyMjICoqX1NlIGRlZmluZSBlbCBwZXJjZXB0csOzbl8qKg0KDQpEZWZpbmlyZW1vcyBsYSBjbGFzZSBkZWwgcGVyY2VwdHLDs24gYXPDrSBjb21vIGxhcyBmdW5jaW9uZXMgZGUgc2FsaWRhIHkgZGUgYXByZW5kaXphamUgZGVsIHBlcmNlcHRyw7NuIHNlZ8O6biBsYXMgc2lndWllbnRlcyBmw7NybXVsYXM6IFtAZG9pOmh0dHBzOi8vZG9pLm9yZy8xMC4xMDAyLzk3ODExMTkwODAwNTMuY2g1XQ0KDQoqMS4tIEbDs3JtdWxhIGRlIHNhbGlkYSBkZWwgcGVyY2VwdHLDs24qDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQokJA0KeSA9IHN0ZXAgKFxzdW1fe2l9IHdfaSAqIHhfaSkNCiQkIC0tLQ0KDQoqMi4tIEbDs3JtdWxhIGRlIGFwcmVuZGl6YWplIG8gY8OhbGN1bG8gZGUgcGVzb3MqDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQokJA0Kd19pID0gd19pICsgXGFscGhhICogKHlfZCAteSkgKiB4X2kNCiQkDQoNCkRvbmRlOg0KDQokXGFscGhhXGhzcGFjZXsxY219JCBDb2VmaWNpZW50ZSBkZSBhcHJlbmRpemFqZQ0KDQokeF9pXGhzcGFjZXsxY219JCBWYWxvciBkZSBsYXMgZW50cmFkYXMNCg0KJHdfaVxoc3BhY2V7MWNtfSQgVmFsb3IgZGUgbG9zIHBlc29zDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojIyMgKipfU2UgaW1wbGVtZW50YSBlbCBwZXJjZXB0csOzbl8qKg0KDQpgYGB7cHl0aG9uIGNsYXNlLCByZXN1bHRzPSdoaWRlJywgY29sbGFwc2U9VFJVRX0NCg0KY2xhc3MgcGVyY2VwdHJvbjoNCiAgDQogIGRlZiBfX2luaXRfXyhpbmljaW8sIG4pOiAjIERhbW9zIHZhbG9yZXMgaW5pY2lhbGVzIGEgbG9zIHBlc29zIHBhcmEgbGFzIG4gZW50cmFkYXMsIHNlIGluaWNpYWxpemENCiAgDQogICAgaW5pY2lvLnBlc29zID0gbnAucmFuZG9tLnJhbmRuKG4pICMgbGEgY2FudGlkYWQgZGUgcGVzb3MgYWxlYXRvcmlvcyBkZXBlbmRlIGRlbCBuw7ptZXJvIGRlIGVudHJhZGFzIG4NCiAgICANCiAgICBpbmljaW8ubiA9IG4gIyBhbG1hY2VubyBlbCBuDQogIA0KICBkZWYgc2FsaWRhcyhpbmljaW8sZW50cmFkYXMpOg0KICAgIA0KICAgIGluaWNpby5zYWxpZGFzX3IgPSAxKihpbmljaW8ucGVzb3MuZG90KGVudHJhZGFzKSA+IDApICMgc2UgcmVhbGl6YSBlbCBjw6FsY3VsbyBkZSBsYSBzYWxpZGEgc2Vnw7puIGbDs3JtdWxhIGRlbCBwdW50byAxDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcm9kdWN0byBlc2NhbGFyIGRlIHBlc29zIHBvciBlbnRyYWRhcyBjb24gdW1icmFsIGVuIDANCiAgICBpbmljaW8uZW50cmFkYXMgPSBlbnRyYWRhcw0KICANCiAgZGVmIGFwcmVuZGl6YWplKGluaWNpbywgYWxwaGEsIHNhbGlkYXNfZGVzZWFkYXMpOg0KICAgIA0KICAgIGZvciBpIGluIHJhbmdlKDAsIGluaWNpby5uKTogIyBTZSBjYWxjdWxhcsOhbiBzYWxpZGFzIHBhcmEgZWwgcmFuZ28gZGUgZW50cmFkYXMgZGUgMCBhIG4NCiAgICANCiAgICAgIGluaWNpby5wZXNvc1tpXSA9IGluaWNpby5wZXNvc1tpXSArIGFscGhhICogKHNhbGlkYXNfZGVzZWFkYXMgLSBpbmljaW8uc2FsaWRhc19yKSAqIGluaWNpby5lbnRyYWRhc1tpXSAjIEPDoWxjdWxvIGRlIHBlc29zIHNlZ8O6biBmw7NybXVsYSBkZWwgcHVudG8gMg0KICAgIA0KYGBgDQoNCiMjIyAqKl9TZSBjcmVhIHVuIFBlcmNlcHRyw7NuIGNvbW8gb2JqZXRvIGNvbW8gZWplbXBsbyBwYXJhIHByb2Jhcl8qKg0KDQpgYGB7cHl0aG9uIE9iamV0b19QZXJjZXB0cm9ufQ0KDQpwZXJjZXB0cm9uX25fZW50cmFkYXMgPSBwZXJjZXB0cm9uKDUpICMgQ3JlYW5kbyB1biBwZXJjZXB0csOzbiBkZSA1IGVudHJhZGFzDQoNCnBlcmNlcHRyb25fbl9lbnRyYWRhcy5wZXNvcw0KDQoNCmBgYA0KDQojIyMgKipfU2UgcHJ1ZWJhbiBsYXMgc2FsaWRhcyBkZWwgcGVyY2VwdHLDs25fKioNCg0KYGBge3B5dGhvbiBTYWxpZGFzX1BlcmNlcHRyb259DQoNCnBlcmNlcHRyb25fbl9lbnRyYWRhcy5zYWxpZGFzKFsxLDAsMSwxLDFdKQ0KDQpwZXJjZXB0cm9uX25fZW50cmFkYXMuc2FsaWRhc19yDQoNCmBgYA0KDQojIyMgKipfU2UgcHJ1ZWJhbiBsYXMgYWN0dWFsaXphY2lvbmVzIGRlIHBlc29zIHkgc2FsaWRhcyBkZWwgcGVyY2VwdHLDs24gbWVkaWFudGUgYXByZW5kaXphamVfKioNCg0KYGBge3B5dGhvbiBBcHJlbmRpemFqZV9QZXJjZXB0cm9ufQ0KDQpwZXJjZXB0cm9uX25fZW50cmFkYXMuYXByZW5kaXphamUoMC41LDEpICMgQ2FtYmlvIGVsIHBlc28geSBsYSBzYWxpZGEgcGFyYSBwcm9iYXIgYXByZW5kaXphamUNCg0KcGVyY2VwdHJvbl9uX2VudHJhZGFzLnBlc29zDQoNCmBgYA0KDQojIyAqKl9VU08gREUgTEEgTkVVUk9OQSBBUlRJRklDSUFMIELDgVNJQ0E6IFBFUkNFUFRSw5NOIENPTiBMQSBGVU5DScOTTiBBTkRfKioNCg0KIyMjICoqX1RhYmxhIGNvcnJlc3BvbmRlbmNpYSBGdW5jacOzbiBBTkRfKioNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiQkDQpcYmVnaW57YXJyYXl9e3xjfGN8Y3xjfH0NClxobGluZSBYX3sxfSAmIFhfezF9ICYgWF97Mn0gJiBcdGV4dCB7IFNhbGlkYSB9IFxcDQpcaGxpbmUgMCAmIDAgJiAxICYgMCBcXA0KXGhsaW5lIDAgJiAxICYgMSAmIDAgXFwNClxobGluZSAxICYgMCAmIDEgJiAwIFxcDQpcaGxpbmUgMSAmIDEgJiAxICYgMSBcXA0KXGhsaW5lDQpcZW5ke2FycmF5fQ0KJCQNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMjIyAqKl9DcmVhbmRvIGVsIFBlcmNlcHRyw7NuIHBhcmEgbGEgZnVuY2nDs24gQU5EIGNvbiAzIGVudHJhZGFzXyoqDQoNCmBgYHtweXRob24gUGVyY2VwdHJvbl9BTkR9DQoNCnBlcmNlcHRyb25fQU5EXzNlbnRfMXNhbCA9IHBlcmNlcHRyb24oMykNCg0KdGFibGFfQU5EID0gbnAuYXJyYXkoW1swLDAsMSwwXSxbMCwxLDEsMF0sWzEsMCwxLDBdLFsxLDEsMSwxXV0pDQoNCm4gPSA0DQoNCmFscGhhID0gMC41DQoNCmhpc3Rvcmljb19wZXNvcyA9IFtwZXJjZXB0cm9uX0FORF8zZW50XzFzYWwucGVzb3NdDQoNCnJlcGVzID0gMTAwDQoNCmZvciBqIGluIHJhbmdlKDAscmVwZXMpOg0KDQogIGZvciBpIGluIHJhbmdlKDAsbik6DQogIA0KICAgIHBlcmNlcHRyb25fQU5EXzNlbnRfMXNhbC5zYWxpZGFzKHRhYmxhX0FORFtpLDA6M10pDQoNCiAgICBwZXJjZXB0cm9uX0FORF8zZW50XzFzYWwuYXByZW5kaXphamUoYWxwaGEsIHRhYmxhX0FORFtpLDNdKQ0KICANCiAgICBoaXN0b3JpY29fcGVzb3MgPSBucC5jb25jYXRlbmF0ZSgoaGlzdG9yaWNvX3Blc29zLFtwZXJjZXB0cm9uX0FORF8zZW50XzFzYWwucGVzb3NdKSwgYXhpcz0wKQ0KICANCmBgYA0KDQojIyMgKipfR3JhZmljYW5kbyBsYXMgc2FsaWRhcyBkZWwgUGVyY2VwdHLDs24gcGFyYSBsYSBmdW5jacOzbiBBTkQgY29uIDMgZW50cmFkYXNfKioNCg0KYGBge3B5dGhvbiBHcmFmaWNhX1BlcmNlcHRyb25fQU5ELCBmaWdfYWxpZ249J2NlbnRlcid9DQoNCm1wbHQucGxvdChoaXN0b3JpY29fcGVzb3NbOiwwXSwnaycpDQoNCm1wbHQucGxvdChoaXN0b3JpY29fcGVzb3NbOiwxXSwncicpDQoNCm1wbHQucGxvdChoaXN0b3JpY29fcGVzb3NbOiwyXSwnYicpDQoNCm1wbHQueWxhYmVsKCdFc3RhYmlsaXphY2nDs24gUGVzb3MnKQ0KDQptcGx0LnhsYWJlbCgnQXByZW5kaXphamUnKQ0KDQptcGx0LnRpdGxlKCdQZXJjZXB0csOzbiBGdW5jacOzbiBBTkQnKQ0KDQptcGx0LnNob3coKQ0KDQpgYGANCg0KDQojIyAqKl9DT05DTFVTSU9ORVNfKioNCg0KKjEuLSBTZSBvYnNlcnZhIGVuIGVsIGdyw6FmaWNvIHJlc3VsdGFudGVzIHF1ZSBsb3MgcGVzb3MgdGllbmVuIHVuIGludGVydmFsbyBkZSBlc3RhYmlsaXphY2nDs24gZHVyYW50ZSBsYXMgcmVwZXRpY2lvbmVzIHF1ZSByZWFsaXphIGVuIHN1IGFwcmVuZGl6YWplIGhhc3RhIHF1ZSBsb3MgcGVzb3Mgc2UgZXN0YWJpbGl6YW4uKg0KDQoqMi4tIEVsIHBlcmNlcHRyw7NuIGhhIGFwcmVuZGlkbyBsYSBmdW5jacOzbiBBTkQuKg0KDQotLS0NCg0KIyMgKipfQmlibGlvZ3JhZsOtYV8qKg0KDQo8ZGl2IGNsYXNzPSJ0b2NpZnktZXh0ZW5kLXBhZ2UiIGRhdGEtdW5pcXVlPSJ0b2NpZnktZXh0ZW5kLXBhZ2UiIHN0eWxlPSJoZWlnaHQ6IDA7Ij48L2Rpdj4=