INFORME PRCTICA N 10
EL PERCEPTRON BASICO
I. OBJETIVO GENERAL Utilizar Matlab para modelar una neurona
artificial y la arquitectura de una red neuronal artificial.
Manejar Matlab y la caja de herramientas de redes neuronales
artificiales para resolver un problema de ingeniera desde esta
perspectiva. Comprender slidamente el funcionamiento de las redes
que utilizan el perceptrn.
Ser capaz de programar con xito simulaciones de estas redes
II. MATERIALES Y EQUIPOSComputador.Sistema Operativo Windows XP
MatLab.
III. PROCEDIMIENTO
%ejemplo pre1: compuerta or(un problema de clasificacion
sencillo)help perlclf resetpausa = 2;%definicion del problemaP = [0
1 0 1; 0 0 1 1];T = [0 0 0 1]%grafica de los vectores a entrenar
disp('presione cualquier tecla para ver los vectors de
entrada')pause, disp('')V = [-2 2 -2 2];PR = [-2 2; -2
2];plotpv(P,T,V);figura=gcf;axis('equal')title('grafica de los
vectores de entrada')xlabel('Entrada 1')ylabel('Entrada 2')pause %
iniciado la arquitectura del la red[R,Q] = size(P); [S,Q] = size
(T);red=newp(PR,S);z = menu('inicializar pesos y umbra
A''condiciones inciales en la guia del estudiante''valores
aleatorios');disp('')if z == 1 red.IW{1,1} = [0.5 1.5]; red.n{1} =
[1.5];else red.inputweights{1,1}.initFcn = 'rands';
red.biases{1}.initFcn = 'rands'; red=init(red);end
%gradica de la clasificacion incialhold
onlinea=plotpc(red.IW{1,1},red.b{1});%entrenamiento de la
red%entrenamiento de los parametrosdisp_freq = 1;max_epoch = 20;W =
red.IW{1,1};B = red.b{1};pesos1 = [W(1,1)];pesos2 =
[W(1,2)];umbrales = [B];%fase de rpesentacionA = sim(red,P);e =
T-A;for epoch=1:max_epoch %dase de revision if all(e==0),
epoch=epoch-1; break, end %fase de aprendizaje dW =
learnp(W,P,[],[],[],[],e,[],[],[]); dB =
learnp(B,ones(1,Q),[],[],[],[],e,[],[],[]); W = W + dW; B = B + dB;
red.IW{1,1}=W; red.b{1}=[B]; %fase de presentacion A = sim(red,P);
e = T-A, % presentacion en progeso if rem(epoch,disp_freq) == 0
pause(pause), disp('') linea=plotpc(W,B,linea); drawnow end pesos1
= [pesos1 W(1,1)]; pesos2 = [pesos2 W(1,2)]; umbrales = [umbrales
B];end% grafica de la clasificacion
finalfigura(figura)plotpc(W,B,linea); drawnowpauseclf reset%
gradica de los pesso y umbrales vs
epochplot(0:epoch,pesos1,'-',0:epoch,pesos2,'--',0:epoch,umbrales,'-.');axis
squaretitle('parametros vs.
iteraciones');xlabel('iteraciones');ylabel('W1____W2____-B
-.-.-.');pause% resumen de los rsultadosfprintf('/nvalores finales
de la red:/n')WBfprintf('entrenada en %. 0f
iteraciones./',epoch);fprintf('red clasificada:');if all(sim(red,P)
== T) disp('correctamente.')else disp('incorrectamente.')end
Universidad Catlica de Santa MariaPrograma Profesional de
Ingeniera Mecnica Elctrica - MecatrnicaProcesos Inteligentes
W = 1.3110 1.3424 B = -0.2155
COMO AND TENEMOS:
W = 1.0637 1.5538 B = -1.5879
%ejemplo pre2: multihelp perlclf resetpausa = 2;%definicion del
problemaP = [0.1 0.7 0.8 0.8 1 0.3 0 -0.3 -0.5 -1.5;1.2 1.8 1.6 0.6
0.8 0.5 0.2 0.8 -1.5 -1.3];T = [1 1 1 0 0 1 1 1 0 0; 0 0 0 0 0 1 1
1 1 1];%grafica de los vectores a entrenar disp('presione cualquier
tecla para ver los vectors de entrada')pause, disp('')V = [-2 2 -2
2];PR = [-2 2; -2
2];plotpv(P,T,V);figura=gcf;axis('equal')title('grafica de los
vectores de entrada')xlabel('Entrada 1')ylabel('Entrada 2')pause%
iniciado la arquitectura del la red[R,Q] = size(P); [S,Q] = size
(T);red=newp(PR,S);z = menu('inicializar pesos y umbra
A''condiciones inciales en la guia del estudiante''valores
aleatorios');disp('')if z == 1 red.IW{1,1} = [-0.6926 0.6048;0.1433
-0.9339]; red.n{1} = [0.0689;-0.0030];else
red.inputweights{1,1}.initFcn = 'rands'; red.biases{1}.initFcn =
'rands'; red=init(red);end%gradica de la clasificacion incialhold
onlinea=plotpc(red.IW{1,1},red.b{1});%entrenamiento de la
red%entrenamiento de los parametrosdisp_freq = 1;max_epoch = 20;W =
red.IW{1,1};B = red.b{1};pesos1 = [W(1,1)];pesos2 =
[W(1,2)];umbrales = [B];%fase de rpesentacionA = sim(red,P);e =
T-A;for epoch=1:max_epoch %dase de revision if all(e==0),
epoch=epoch-1; break, end %fase de aprendizaje dW =
learnp(W,P,[],[],[],[],e,[],[],[]);
dB = learnp(B,ones(1,Q),[],[],[],[],e,[],[],[]); W = W + dW; B =
B + dB; red.IW{1,1}=W; red.b{1}=[B]; %fase de presentacion A =
sim(red,P); e = T-A, % presentacion en progeso if
rem(epoch,disp_freq) == 0 pause(pause), disp('')
linea=plotpc(W,B,linea); drawnow end pesos1 = [pesos1 W(1,1)];
pesos2 = [pesos2 W(1,2)]; umbrales = [umbrales B];end% grafica de
la clasificacion final figura(figura)plotpc(W,B,linea);
drawnowpauseclf reset % gradica de los pesso y umbrales vs epoch
plot(0:epoch,pesos1,'-',0:epoch,pesos2,'--',0:epoch,umbrales,'-.');axis
squaretitle('parametros vs.
iteraciones');xlabel('iteraciones');ylabel('W1____W2____-B
-.-.-.');pause% resumen de los rsultadosfprintf('/nvalores finales
de la red:/n')WBfprintf('entrenada en %. 0f
iteraciones./',epoch);fprintf('red clasificada:');if all(sim(red,P)
== T) disp('correctamente.')else disp('incorrectamente.')end
W = -4.9460 6.3647 -2.0732 -1.5049
B = -0.3706 1.8116
entrada en red clasificada: correctamente.
6. Cree un archivo-m para lograr una compuerta OR de 5
entradas
%ejemplo pre1: compuerta or(un problema de clasificacion
sencillo)help perlclf resetpausa = 2;
%definicion del problemaP = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1; 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0
0 0 0 0 0 1 1 1 1 1 1 1 1; 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0
1 1 1 1 0 0 0 0 1 1 1 1; 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
0 1 1 0 0 1 1 0 0 1 1; 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 ];T = [0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1]
% iniciado la arquitectura del la red[R,Q] = size(P); [S,Q] =
size (T);red=newp(PR,S);z = menu('inicializar pesos y umbra
A''condiciones inciales en la guia del estudiante''valores
aleatorios');disp('')if z == 1 red.IW{1,1} = [0.5 1.5 0.33 2 1.4];
red.n{1} = [0.5];else red.inputweights{1,1}.initFcn = 'rands';
red.biases{1}.initFcn = 'rands'; red=init(red);end%entrenamiento de
la red%entrenamiento de los parametrosdisp_freq = 1;max_epoch = 20;
W = red.IW{1,1};B = red.b{1};pesos1 = [W(1,1)];
pesos2 = [W(1,2)];umbrales = [B];%fase de rpesentacion%A =
sim(red,P);%e = T-A;for epoch=1:max_epoch %dase de revision if
all(e==0), epoch=epoch-1; break, end %fase de aprendizaje dW =
learnp(W,P,[],[],[],[],e,[],[],[]); dB =
learnp(B,ones(1,Q),[],[],[],[],e,[],[],[]); W = W + dW; B = B + dB;
red.IW{1,1}=W; red.b{1}=[B]; %fase de presentacion %A = sim(red,P);
%e = T-A, % presentacion en progeso if rem(epoch,disp_freq) == 0
pause(pause), disp('') linea=plotpc(W,B,linea); drawnow end pesos1
= [pesos1 W(1,1)]; pesos2 = [pesos2 W(1,2)]; umbrales = [umbrales
B];end
% resumen de los rsultadosfprintf('/nvalores finales de la
red:/n')WBfprintf('entrenada en %. 0f
iteraciones./',epoch);fprintf('red clasificada:');if all(sim(red,P)
== T) disp('correctamente.')else disp('incorrectamente.')end
W = -0.0292 0.6006 B = 0.9143
%ejemplo pre3: alejado de la convergenciahelp perlclf resetpausa
= 2;%definicion del problemaP = [0 1 0 1; 0 0 1 1];T = [1 0 0
1]%grafica de los vectores a entrenar disp('presione cualquier
tecla para ver los vectors de entrada')pause, disp('')V = [-2 2 -2
2];PR = [-2 2; -2
2];plotpv(P,T,V);figura=gcf;axis('equal')title('grafica de los
vectores de entrada')xlabel('Entrada 1')ylabel('Entrada 2')pause %
iniciado la arquitectura del la red[R,Q] = size(P); [S,Q] = size
(T);red=newp(PR,S);z = menu('inicializar pesos y umbra
A''condiciones inciales en la guia del estudiante''valores
aleatorios');disp('')if z == 1 red.IW{1,1} = [0.5 1.5]; red.n{1} =
[1.5];else red.inputweights{1,1}.initFcn = 'rands';
red.biases{1}.initFcn = 'rands'; red=init(red);end%gradica de la
clasificacion incialhold
onlinea=plotpc(red.IW{1,1},red.b{1});%entrenamiento de la
red%entrenamiento de los parametrosdisp_freq = 1;max_epoch = 20; W
= red.IW{1,1};B = red.b{1};pesos1 = [W(1,1)];pesos2 =
[W(1,2)];umbrales = [B];%fase de rpesentacionA = sim(red,P);e =
T-A;for epoch=1:max_epoch %dase de revision if all(e==0),
epoch=epoch-1; break, end %fase de aprendizaje dW =
learnp(W,P,[],[],[],[],e,[],[],[]); dB =
learnp(B,ones(1,Q),[],[],[],[],e,[],[],[]); W = W + dW; B = B + dB;
red.IW{1,1}=W; red.b{1}=[B];
%fase de presentacion A = sim(red,P); e = T-A, % presentacion en
progeso if rem(epoch,disp_freq) == 0 pause(pause), disp('')
linea=plotpc(W,B,linea); drawnow end pesos1 = [pesos1 W(1,1)];
pesos2 = [pesos2 W(1,2)]; umbrales = [umbrales B];end% grafica de
la clasificacion final figura(figura)plotpc(W,B,linea);
drawnowpauseclf reset % gradica de los pesso y umbrales vs epoch
plot(0:epoch,pesos1,'-',0:epoch,pesos2,'--',0:epoch,umbrales,'-.');axis
squaretitle('parametros vs.
iteraciones');xlabel('iteraciones');ylabel('W1____W2____-B
-.-.-.');pause% resumen de los rsultadosfprintf('/nvalores finales
de la red:/n')WBfprintf('entrenada en %. 0f
iteraciones./',epoch);fprintf('red clasificada:');if all(sim(red,P)
== T) disp('correctamente.')else disp('incorrectamente.')end
W = 0.9190 0.3115B = 0.5844
entreda en red clasificada: incorrectamente.