Sunteți pe pagina 1din 11

Universidad Catlica de Santa Maria

Programa Profesional de Ingeniera Mecnica Elctrica - Mecatrnica


Procesos Inteligentes
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.

III.

MATERIALES Y EQUIPOS
Computador.
Sistema Operativo Windows XP
MatLab.
PROCEDIMIENTO

%ejemplo pre1: compuerta or(un problema de clasificacion sencillo)


help perl
clf reset
pausa = 2;
%definicion del problema
P = [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

Universidad Catlica de Santa Maria


Programa Profesional de Ingeniera Mecnica Elctrica - Mecatrnica
Procesos Inteligentes
%gradica de la clasificacion incial
hold on
linea=plotpc(red.IW{1,1},red.b{1});
%entrenamiento de la red
%entrenamiento de los parametros
disp_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
% grafica de la clasificacion final
figura(figura)
plotpc(W,B,linea); drawnow
pause
clf reset
% gradica de los pesso y umbrales vs epoch
plot(0:epoch,pesos1,'-',0:epoch,pesos2,'--',0:epoch,umbrales,'-.');
axis square
title('parametros vs. iteraciones');
xlabel('iteraciones');
ylabel('W1____W2____-B -.-.-.');
pause
% resumen de los rsultados
fprintf('/nvalores finales de la red:/n')
W
B
fprintf('entrenada en %. 0f iteraciones./',epoch);
fprintf('red clasificada:');
if all(sim(red,P) == T)
disp('correctamente.')
else
disp('incorrectamente.')
end

W=

1.3110

1.3424

B = -0.2155

COMO AND TENEMOS:

W = 1.0637

1.5538

B = -1.5879

%ejemplo pre2: multi


help perl
clf reset
pausa = 2;
%definicion del problema
P = [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 incial
hold on
linea=plotpc(red.IW{1,1},red.b{1});
%entrenamiento de la red
%entrenamiento de los parametros
disp_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
% grafica de la clasificacion final
figura(figura)
plotpc(W,B,linea); drawnow
pause
clf reset
% gradica de los pesso y umbrales vs epoch
plot(0:epoch,pesos1,'-',0:epoch,pesos2,'--',0:epoch,umbrales,'-.');
axis square
title('parametros vs. iteraciones');
xlabel('iteraciones');
ylabel('W1____W2____-B -.-.-.');
pause
% resumen de los rsultados
fprintf('/nvalores finales de la red:/n')
W
B
fprintf('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 perl
clf reset
pausa = 2;
%definicion del problema
P = [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 parametros
disp_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

end

% resumen de los rsultados


fprintf('/nvalores finales de la red:/n')
W
B
fprintf('entrenada en %. 0f iteraciones./',epoch);
fprintf('red clasificada:');
if all(sim(red,P) == T)
disp('correctamente.')
else
disp('incorrectamente.')

W = -0.0292

0.6006

B = 0.9143

%ejemplo pre3: alejado de la convergencia


help perl
clf reset
pausa = 2;
%definicion del problema
P = [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 incial
hold on
linea=plotpc(red.IW{1,1},red.b{1});
%entrenamiento de la red
%entrenamiento de los parametros
disp_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
% grafica de la clasificacion final
figura(figura)
plotpc(W,B,linea); drawnow
pause
clf reset

% gradica de los pesso y umbrales vs epoch


plot(0:epoch,pesos1,'-',0:epoch,pesos2,'--',0:epoch,umbrales,'-.');
axis square
title('parametros vs. iteraciones');
xlabel('iteraciones');
ylabel('W1____W2____-B -.-.-.');
pause
% resumen de los rsultados
fprintf('/nvalores finales de la red:/n')
W
B
fprintf('entrenada en %. 0f iteraciones./',epoch);
fprintf('red clasificada:');
if all(sim(red,P) == T)
disp('correctamente.')
else
disp('incorrectamente.')
end

W = 0.9190 0.3115
B = 0.5844
entreda en red clasificada: incorrectamente.

S-ar putea să vă placă și