Sie sind auf Seite 1von 10

VI Desarrollo

La practica se dividio en cuatro problemas, cada uno se desarrollo primero


en papel, observando su comportamiento mediante tablas o ecuaciones, a
continuacin se muestra como se desarrollo cada una de las redes.

6.1 Red XOR

Para elaborar la red de la xor con una ecuacin diferente, primero buscamos
en internet algn modelo o alguna gua, la cual la siguiente funcin

)( a+b )
( ab
, para realizar la red neural observamos que la red necesitara
tres neuronas dos cultas y una de salida, de las ocultas una cumplir la
funcin de la and, y la otra neurona la funcin or, al final la neurona de
salida ser la funcin and. En seguida mostramos la red neural, con los
pesos que supusimos y que despus comprobaremos en las tablas.

Imagen 6.1 red neural


A continuacin mostramos las tablas que elaboramos, en la tabla 6.1
mostraremos el anlisis para la neurona que representara la compuerta
nand,
con
los
pesos
w1.1
y
w1.2
iguales
a
-1
X
1

X2

y =X 1W 1.1+ X 2W 1.2

1 Z1

0=0(1)+0 (1)

1=0(1)+1(1)

1=1(1)+0(1)

2=1(1)+1(1)

Tabla 6.1 Tabla de verdad de neurona nand


Enseguida mostramos las tablas que elaboramos, en la tabla 6.2
mostraremos el anlisis para la neurona que representara la compuerta or,
con
los
pesos
w2.1
y
w2.2
iguales
a
1

X
1

X2

y =X 1W 2.1+ X 2W 2.2

0=0(1)+ 0(1)

1=0 (1)+1(1)

1=1(1)+0(1)

2=1(1)+1(1)

Z
2

Tabla 6.2 Tabla de verdad de neurona or


A continuacin mostramos las tablas que elaboramos, en la tabla 6.3
mostraremos el anlisis para la neurona que representara la compuerta and,
con
los
pesos
v1
y
v2
iguales
a
1

Z
1

Z2

y =X 1V 1 + X 2V 2

1=1(1)+0(1)

2=1(1)+1(1)

2=1(1)+1(1)

1=1(0)+1(1)

Tabla 6.3 Tabla de verdad de neurona and


Luego elaboramos la funcin mediante el software de matlab, que realizara
las operaciones de nuestra nueva red neural xor. Primero creamos un
programa que hara la funcin de la red, a la que llamamos NN_XOR2 la cual
despus llamaremos para ver la respuesta de la red neural.
function Y=NN_XOR2(x) %nombramos
%weight
w=[-1 -1;1 1];%damos valor nuestros pesos, en una matriz 2*2
%donde w1.1 y w1.2 estan en la primera fila y
%w1.2 y w2.2 estan en la segunda fila
Threshold=[-1,1];%damos valor a los umbrales de las neuronas ocultas

Threshold2=2;

%la primera fila para la neurona 1 y la segunda para


%la dos
%damos el valor para el umbral de la neurona de salida

%inputs and weights application, hidden layer


z_in=zeros(1,2); %colocamos los valores de nuestra zin en una matriz
%de 1*2, el primer valor representara la primera
neurona
%el segundo valor representara la segunda neurona
for(i=1:2)
%mediante ciclos realizamos la suma de la red
z_in(1,1)=z_in(1,1)+w(1,i)*x(1,i);
z_in(1,2)=z_in(1,2)+w(2,i)*x(1,i);
end
Z=zeros(1,2);
nuestras

%creamos una salida para guardar los valores de

%reded ocultas
for (i=1:2)
%mediante este ciclo creamos el valor para cada Z
if (z_in(1,i)>=Threshold(1,i)) %los if nor servira para dar el
valor
Z(1,i)=1;
%de 1 o 0 a cada Z
else Z(1,i)=0;
end
end
v=ones(1,2); %damos valor de 1 a nuestros pesos "v"
y_in=0;
%igualamos a 0 nuestro y_in para realizar las sumas
for(i=1:2)
%mediante este ciclo, acemos la sumatoria de y_in
y_in=y_in+v(1,i)*Z(1,i);
end
%activation function, output layer
if(y_in>=Threshold2) Y=1; %mediante el if damos un valor de 1 o 0 a Y
else Y=0;
end

Despues elaboramos un programa que llama a la funcin, e imprime en


matlab los valores de entrada y el resultado final, aqu mostramos la
programacin.
%input vector
x=[0 0; 0 1; 1 0; 1 1]; %incluimos los valores de entrada a nuestra
red
%print a label
fprintf('XOR2\n'); %imprimimos el titulo de la red
fprintf('x1,x2=Y\n'); %imprimimos una fila para ver a que corresponden
%los siguientes valores
for (i=1:4)
%mediante el ciclo vamos llamando la funcion con
los
%diferentes 4 filas de valores de x, por eso el
ciclo
%se repite 4 veces
Y=NN_XOR2(x(i,:));
%llamamos la fila de valor de x dependiendo
del
%del valor de i

fprintf('(%d , %d) = %d\n',x(i,1),x(i,2),Y); %imprimimos los


valores
%y resultados de la
%funcion
end

Notas musicales

Para desarrollar la red que generaba los tonos, primero analizamos que
condiciones tendra que llevar, una de ellas es que dos tonos no se podan
tocar al mismo tiempo ya que no se marcaria una escala, despus se tiene
que observar si es una escala ascendente o descendente, primeramente
creamos tres neuronas ocultas las cuales nos permitirn realizar la condicin
de que no se puedan tocar notas al mismo tiempo, tienen que ser tres
debido a que despus se har un anlisis de cual nota se introdujo primero y
cual despus, de las salidas de dichas neuronas se har el anlisis para ver
si es ascendente o descendente. Las tablas de verdad para cada nota se
mostraran enseguida (tabla 6.6, tabla 6.7, tabla 6.8)

DO
0
0
0
0
1
1
1
1
DO
0
0
0
0

RE
MI
0
0
0
1
1
0
1
1
0
0
0
1
1
0
1
1
Tabla 6.6 Tabla de verdad de la salida de
RE
0
0
1
1

MI
0
1
0
1

Salida de Do
0
0
0
0
1
0
0
0
Do
Salida de Do
0
0
1
0

1
1
1
1

0
0
0
1
1
0
1
1
Tabla 6.7 Tabla de verdad de la salida de

0
0
0
0
RE

DO
0
0
0
0
1
1
1
1

RE
MI
0
0
0
1
1
0
1
1
0
0
0
1
1
0
1
1
Tabla 6.8 Tabla de verdad de la salida de

Salida de Do
0
1
0
0
0
0
0
0
RE

Despues analizando el orden de desendente y ascendente creamos las


siguientes ecuaciones:

ascendente=Do ( t2 ) ( t1 )Mi(t)
Aunque primero sea tocada do necestiamos analisarla hasta que se toque
mi, que ser en el tiempo 3 de nuestra red, por lo que la nota Do la tenemos
que retrasar su respuesta para verel valor de t-2 y Re en t-1, analizado esto
para descendente lo nico que cambia son los valores de tiempo de Do y Mi
quedando de la siguiente manera:

descendente : Do ( t ) ( t1 )Mi(t 2)

Observando esto sabemos que las redes neurales de salida, son dos and de
tres entradas, cuya tabla de verdad se muestra en la tabla 6.9
X1
0
0
0
0
1
1
1
1

X2
X3
Y
0
0
0
0
1
0
1
0
0
1
1
0
0
0
0
0
1
0
1
0
0
1
1
1
Tabla 6.9 Tabla de verdad de AND de 3 entradas

Analizando las tablas de verdad se creo la siguiente red que se muestra en


la imagen 6.5, las neuronas ocultas su nica funcin es solo guardar los
valores obtenidos

Para realizar las tablas de verdad mediante el modelo de Mc Calloch-Pitts se


mostrara en las tablas 6.10 (DO) para que solo se pueda ingresar la nota Do
sin tocar otra nota, tabla 6.11(RE) para que solo se pueda ingresar la nota
RE sin tocar otra nota, tabla 6.12(MI) para que solo se pueda ingresar la
nota Mi sin tocar otra nota,:

Do

Re

Mi

y =DoW 1.1 + W 1.2 + MiW 1.3

0=0 (1 )+ 0 (1 ) +0(1)

1=0 ( 1 )+ 0 (1 ) +1(1)

1=0 ( 1 )+ 1 (1 ) +0(1)

2=0 ( 1 )+ 1 (1 ) +1(1)

1=1 ( 1 )+ 0 (1 ) +0 (1)

0=1 ( 1 ) +0 (1 )+ 1(1)

0=1 ( 1 ) +1 (1 ) +0 (1)

1=1 ( 1 ) +1 (1 ) +1(1)

Tabla6.10 Tabla para neurona de ingleso Do

Z1

Do

Re

Mi

y =DoW 1.1 + W 1.2 + MiW 1.3

Z1

0=0 (1 ) +0 ( 1 ) +0(1)

1=0 (1 ) +0 ( 1 ) +1(1)

1=0 (1 )+ 1 ( 1 ) +0 (1)

0=0 (1 ) +1 ( 1 )+ 1(1)

1=1 (1 ) +0 ( 1 ) +0(1)

2=1 (1 ) +0 ( 1 ) +1(1)

0=1 (1 )+ 1 ( 1 ) +0 (1)

1=1 (1 ) +1 (1 ) +1(1)

Tabla6.11 Tabla para neurona de ingleso Re

Do

Re

Mi

y =DoW 1.1 + W 1.2 + MiW 1.3

Z1

0=0 (1 ) +0 (1 )+ 0(1)

1=0 (1 )+ 0 (1 ) +1(1)

1=0 (1 ) +1 (1 )+ 0(1)

0=0 (1 ) +1 (1 ) +1(1)

1=1 (1 ) +0 (1 )+ 0(1)

0=1 (1 )+ 0 (1 ) +1(1)

2=1 (1 ) +1 (1 ) +0(1)

1=1 (1 ) +1 (1 ) +1(1)

Tabla6.10 Tabla para neurona de ingleso Mi


Tanto para la red asendente y desendente son una neurona and de tres,
cuyos pesos son iguales por lo que se hara el anlisis con la misma
tabla(tabla 6.13)

Do

Re

Mi

y =DoW 1.1 + W 1.2 + MiW 1.3

Z1

0=0 (1 )+ 0 ( 1 ) +0 (1)

1=0 ( 1 ) +0 ( 1 ) +1(1)

1=0 ( 1 ) +1 ( 1 )+ 0(1)

2=0 ( 1 ) +1 ( 1 )+1( 1)

1=1 ( 1 )+ 0 ( 1 )+ 0(1)

2=1 ( 1 )+ 0 ( 1 )+1( 1)

2=1 ( 1 )+ 1 ( 1 ) +0( 1)

3=1 ( 1 ) +1 (1 ) +1(1)

Tabla6.13 Tabla para neurona de ingleso Do


Enseguida se prosigui a programar la red neural mediante el software de
matlab, la programacin se mostrara a continuacin:
%mostramos en la siguiente parte como se fue ingresando las notas, las
%cuales seran 12 periodos de tiempo, y como se fue dando la escala
%acendente y decendente
% 1 2
%Y1=DO
%Y2=
RE
%Y3=
%
1 2 3
x1=[1 0 0
x2=[0 1 0
x3=[0 0 1

3 4 5
MI
4 5
0 0
0 0
0 1

MI
7
1
0
0

6
0
1
0

6 7

9 10 11 12
DO
RE
RE
MI MI
8 9101112
0 0 0 1 0];%DO
0 0 1 0 0];%RE
0 1 1 0 0];%MI
DO

T=12;% 12 periodos de tiempo,


Threshold=1; %este umbral se utilizara en las neuronas que permitiran
solo
%ingresar una nota.
Threshold2=3;%este umbral se utilziara en las neuronas de salida para
la
%and de tres entradas
%capas escondidas
Z1=zeros(1,T);%creamso vectores con valodres de cero de las neuronas
Z2=zeros(1,T);%ocultas con la magnitud de 1* los periodos de tiempo,
Z3=zeros(1,T);

%capas de salida
Y1=0;
%igualamos primero a 0 nuestra salida
Y2=0;
%pesos %damos valores a cada uno de los pesos que se utilizaran
w1=1; w2=-1;w3=-1;w4=-1;w5=1;w6=-1;w7=-1;w8=-1;w9=1;
w10=1;w11=1;w12=1;w13=1;w14=1;w15=1;

%avanze en el tiempo
for (t=1:T)
%con este ciclo for lo que se pretende es repetir el
proceso
%hasta el periodo de tiempo que ingresamos
%entradas y pesos aplicados,
z1_in=w1*x1(t)+w4*x2(t)+w7*x3(t);%representa la neurona para Do
z2_in=w2*x1(t)+w5*x2(t)+w8*x3(t);%representa la neurona para Re
z3_in=w3*x1(t)+w6*x2(t)+w9*x3(t);%representa la neurona para Mi
%activacion de funcion, capa oculta Z1
if (z1_in>=Threshold) Z1(t)=1; %con el if activamos el valor para
Do
else Z1(t)=0;
end
%activacion de funcion, capa oculta Z2
if (z2_in>=Threshold) Z2(t)=1; %con el if activamos el valor para
RE

else Z2(t)=0;
end
%activacion de funcion, capa oculta Z3
if (z3_in>=Threshold) Z3(t)=1;%con el if activamos el valor para MI
else Z3(t)=0;
end

if(t<=3) continue; %volvera al for y no hara las instrucciones


mientras
%el tiempo sea menor o igual a 3
end

%entrdas y pesos aplicados

y1_in=w10*Z1(t-3)+w11*Z2(t-2)+w12*Z3(t-1); %con esta funcion


%se hace la operacion
%de la ecuacion para
%ascendente
y2_in=w13*Z1(t-1)+w14*Z2(t-2)+w15*Z3(t-3);%con esta funcion
%se hace la operacion
%de la ecuacion para
%descendente
%funcion de activacion, capa de salida Y1
if (y1_in>=Threshold2) Y1=1;
%se activa la funcion para
ascendente
else Y1=0;
end
%funcion de activacion, capa de salida Y2
if (y2_in>=Threshold2) Y2=1; %se activa la funcion para
descendente
else Y2=0;
end
printing NN output

%con fprint f imprimimos los valores que se van ingresando en el


tiempo
%aunque imprimira desde el tiempo 4 devido al continue que pusimos
%anteriormente
fprintf('t=%d
Y1=%d
Y2=%d', t, Y1,Y2);
if(Y1) fprintf('
%s\n','acendente');
elseif(Y2) fprintf('
%s\n','decendente');
else fprintf('\n');
end

Para explicar como funciona el programa mediante avanza el tiempo se


diseo la tabla 6.14, como podemos observar, cuando en hay dos notas que
toquen al mismo tiempo se volvern 0 Z1, Z2 y Z3 por la configuracin de
las neuronas, adems y1 y y2 tienen resultados hasta el tiempo 4 devido al
if continue que ingresamos al programa.
T
DO
RE
MI
Z1
Z2
Z3
Y1
Y2

1
1
0
0
1
0
0
x
x

2
0
1
0
0
1
0
x
x

3
0
0
1
0
0
1
x
x

4
0
0
0
0
0
0
1
0

5
0
0
1
0
0
1
0
0

6
0
1
0
0
1
0
0
0

7
1
0
0
1
0
0
0
1

8
0
0
0
0
0
0
0
0

9
0
0
1
0
0
1
0
0

10
1
1
0
0
0
0
0
0

11
1
0
0
1
0
0
0
0

12
0
0
0
0
0
0
0
0

Das könnte Ihnen auch gefallen