Code
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
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=