Laboratorio 2
CURSO: CONTROL INTELIGENTE
ALUMNO: CHRISTIAN QUISPE CANCHARI
CODIGO: 1223220428
AÑO:
2021
LABORATORIO N°2
I.
OBJETIVOS
· Conocer la manera como se puede usar una red neuronal tipo
Perceptrón para reconocimiento de caracteres.
· Realizar un reconocimiento usando el Perceptrón del Matlab.
II. PROCEDIMIENTO
Para iniciar con el desarrollo del trabajo, primero identificamos los números del
0-9 dentro de una matriz de 5X3, para así poder obtener el patrón de entradas,
tal como mostramos en las siguientes imágenes:
3. PROCEDIMIENTO
3.1 Perceptron para realizar un reconocimiento de caracteres en MATLAB
El objetivo es entrenar un Perceptron que pueda identificar los números del 0 al
9 donde cada número se puede definir en una matriz de 5*3, por ejemplo el
número 2 será:
Para resolver el problema, es necesario verificar todos los patrones
correspondientes a cada número, yasignarles el respectivo valor de salida. En
nuestro caso, definiremos por patrón, un vector de entrada de 15 elementos y
un vector de salida de 4 elementos, correspondientes a el número binario
equivalente.
Entonces, primero analicemos los patrones:
Ahora se necesita definir la salida que deseamos genere la red. Para esto se
debe codificar de alguna
manera la información que generará la red en sus neuronas de salida. Una
alternativa consiste en que la salida de la red esta formada por el código binario
del número que se le esta presentando a la entrada. Es decir si a la red le
llegan como entrada los 15 bits correspondientes al número 0 ella genera el
código binario del cero expresado en 4 bits (0 0 0 0), si en cambio le llegan
como entrada los 15 bits correspondientes al número 1 ella genera el código
binario del uno expresado en 4 bits (0 0 0 1) y así con el resto de patrones.
Teniendo en cuenta lo anterior los patrones de entrenamiento para los diez
números corresponderán a la siguiente tabla.
Programa de entrenamiento en Matlab
Entrenamiento de Red Neuronal por Matlab
Resultados de entrenamiento
Obtención de pesos
Verificación del entrenamiento de Red neuronal
número introducido: 5
número 5 en binario
A. IMPLEMENTACIÓN EN PROTEUS UTILIZANDO ARDUINO MEGA
a. Código de Arduino Mega:
Como se mencionó anteriormente, los resultados de los pesos sinápticos y bias,
serán utilizados para poder crear el código del programa:
// Programa para la simulación para el reconocimiento de números 0-9
int x0=2,x1=3,x2=4,x3=5,x4=6,x5=7,x6=8,x7=9; // declaramos las entradas
int x8=10,x9=11,x10=12,x11=13,x12=14,x13=15,x14=16;
int y0=23,y1=25,y2=27,y3=29; // declaramos las salidas
int p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14; // declaramos las lecturas
de las entradas
float Axon1=0,Axon2=0,Axon3=0,Axon4=0; // funciones de salidas
void setup() {
pinMode(x0,INPUT); // Entradas
pinMode(x1,INPUT);
pinMode(x2,INPUT);
pinMode(x3,INPUT);
pinMode(x4,INPUT);
pinMode(x5,INPUT);
pinMode(x6,INPUT);
pinMode(x7,INPUT);
pinMode(x8,INPUT);
pinMode(x9,INPUT);
pinMode(x10,INPUT);
pinMode(x11,INPUT);
pinMode(x12,INPUT);
pinMode(x13,INPUT);
pinMode(x14,INPUT);
pinMode(y0,OUTPUT); // Salidas
pinMode(y1,OUTPUT);
pinMode(y2,OUTPUT);
pinMode(y3,OUTPUT);
void loop() {
p0=digitalRead(x0); // Lectura de las 15 entradas
p1=digitalRead(x1);
p2=digitalRead(x2);
p3=digitalRead(x3);
p4=digitalRead(x4);
p5=digitalRead(x5);
p6=digitalRead(x6);
p7=digitalRead(x7);
p8=digitalRead(x8);
p9=digitalRead(x9);
p10=digitalRead(x10);
p11=digitalRead(x11);
p12=digitalRead(x12);
p13=digitalRead(x13);
p14=digitalRead(x14);
// Se realiza la sumatoria y de las salida del la nuerona, las que luego será
analizadas para determinar la salida de la red
Axon1=((-6.1908*p0 + 7.3258*p1 -6.8193*p2 + 8.6537*p3 + 0.7947*p4 +
7.7519*p5 - 6.3288*p6 + 12.3908*p7 - 6.2109*p8 + 3.9509*p9 + 0.6312*p10 +
3.6525*p11 - 1.9749*p12 - 1.6296*p13 - 6.8231*p14) - 6.7762);
Axon2=((12.7486*p0 - 9.4536*p1 + 2.2554*p2 - 3.0674*p3 + 0.5774*p4 -
15.7713*p5 - 3.2848*p6 - 2.1839*p7 + 2.8523*p8 - 5.5560*p9 + 0.3551*p10 +
2.6050*p11 - 0.4211*p12 + 0.8416*p13 + 2.9574*p14)+ 2.3736);
Axon3=((2.1202*p0 + 4.3989*p1 + 1.0205*p2 - 17.8365*p3 + 0.4400*p4 -
5.9358*p5 + 0.6421*p6 + 1.3174*p7 + 1.50569*p8 + 5.0600*p9 + 0.9970*p10 -
0.6128*p11 + 2.1841*p12 + 2.7342*p13 + 1.2653*p14) + 1.0875);
Axon4=((-0.4750*p0 + 3.4151*p1 + 0.9237*p2 - 2.0789*p3 + 0.2576*p4 -
1.2327*p5 - 2.5810*p6 - 1.1855*p7 + 0.6357*p8 - 12.1333*p9 + 0.2242*p10 +
1.1422*p11 + 0.7258*p12 + 0.5710*p13 + 0.9646*p14)+ 0.6401);
if(Axon1>=0){
digitalWrite(y0,HIGH);}
else {
digitalWrite(y0,LOW);}
if(Axon2>=0){
digitalWrite(y1,HIGH);}
else {
digitalWrite(y1,LOW);}
if(Axon3>=0){
digitalWrite(y2,HIGH);}
else {
digitalWrite(y2,LOW);}
if(Axon4>=0){
digitalWrite(y3,HIGH);}
else {
digitalWrite(y3,LOW);}
B. SIMULACION EN PROTEUS
C. El número cero
D. EL NÚMERO 3