0% encontró este documento útil (0 votos)
54 vistas12 páginas

Informe N°9

El documento presenta un ejercicio sobre redes ADALINE utilizando Matlab. El objetivo es modelar una neurona artificial y una red neuronal para resolver problemas de ingeniería. Se describen dos ejemplos de redes ADALINE básicas donde se varía la tasa de aprendizaje para analizar su efecto en el entrenamiento.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
54 vistas12 páginas

Informe N°9

El documento presenta un ejercicio sobre redes ADALINE utilizando Matlab. El objetivo es modelar una neurona artificial y una red neuronal para resolver problemas de ingeniería. Se describen dos ejemplos de redes ADALINE básicas donde se varía la tasa de aprendizaje para analizar su efecto en el entrenamiento.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD CATOLICA SANTA MARIA

FACULTAD DE CIENCIAS E INGENIERÍAS


FÍSICAS Y FORMALES
ESCUELA PROFESIONAL DE INGENIERIA MECÁNICA, MECÁNICA
ELÉCTRICA Y MECATRÓNICA





CURSO:

Procesos Inteligentes
ALUMNO(S):

PAREDES CARPIO, WLADIMIR


DOCENTE:

MESTAS RAMOS, SERGIO ORLANDO


SEMESTRE: X GRUPO: 01

AREQUIPA – PERÚ

2021
REDES ADALINE
1. OBJETIVO GENERAL:

- Utilizar Matlab para poder 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 ingeniería desde esta perspectiva.
- Comprender sólidamente el funcionamiento de las redes ADALINE.
- Ser capaz de programar con éxito simulaciones de estas redes.

2. MATERIALES Y EQUIPOS:

- Computador
- Sistema operativo Windows cualquier versión
- Matlab

3. PROCEDIMIENTO:

RED ADALINE BASICA

Cree un archivo-m con el nombre de adeline1.m que obtenga una salida deseada para
cada uno de los datos a la entrada usando la arquitectura ADALINE:
Los datos de entrada son P = [+1.0 -1.2], las salidas son T = [+1.0 +0.5], el peso inicial
de la entrada es -0.9309, el peso de la entrada del umbral es -08931 y el error
cuadrático medio debe ser menor o igual a 0.001.

CÓDIGO:
%Ejemplo ADALINE1:ASOCIACIÓN DE PATRONES
%Autor: Paredes Carpio, Wladimir
clear all;close all;clc;
clf reset
tiempopausa = 0.01;
% DEFINICIÓN DEL PROBLEMA
%========================
% Definición de los dos vectores de entrada de 1 elemento.
P = [+1.0 -1.2];
% Definición de los dos vectores deseados de 1 elemento.
T = [+1.0 +0.5];
% GRÁFICA DE MALLA DEL ERROR
%===========================
disp('Calculado la superficie de error, por favor espere...'),
disp('')
Wrango = -1:.1:1;
Brango = -1:.1:1;
SE = errsurf(P,T,Wrango,Brango,'purelin');
disp('Presione cualquier tecla para ver la superficie de error.'),
disp(''), pause
plotes(Wrango,Brango,SE);
figura=gcf;
subplot(1,2,1)
title('Gráfica de la Superficie de Error');
xlabel('Peso W');
ylabel('-Umbral B');
zlabel('Error Cuadrado Medio');
subplot(1,2,2)
title('Gráfico de Contorno del Error');
xlabel('Peso W');
ylabel('Umbral B');
pause
% INICIALIZACIÓN DE LA ARQUITECTURA DE LA RED
%============================================
% Encuentra el tamaño del vector de entrada R, el tamaño de la capa
S, el tamaño del lote Q.
[R,Q] = size(P); [S,Q] = size(T);
% DISEÑO DE LA RED
%=================
PR=[-2 2]; %rango del elemento de entrada.
ID=[0]; %Vector de Retraso de Entrada.
max_razon_aprendizaje = 0.4 * maxlinlr(P,'bias');
red=newlin(PR,S,ID,max_razon_aprendizaje);
% Inicialización de pesos y umbral.
z = menu('Inicializar Pesos y Umbral a:','Condiciones Iniciales en
la guía del estudiante','Marcar Valores con el Ratón/Teclas de
Desplazamiento sobre el graf. de contorno','Valores Aleatorios');
disp('');
if z == 1
red.IW{1,1} = [-0.9309];
red.b{1} = [-0.8931];
elseif z == 3
red.inputweights{1,1}.initFcn = 'rands';
red.biases{1}.initFcn = 'rands';
red=init(red);
end
% GRÁFICA DE CONTORNO DEL ERROR, CONDICIONES INICIALES, SOLUCIÓN
DISEÑADA
%==================================================================
======
figure(figura)
subplot(1,2,2)
axis('equal')
if z == 2
title('SELECIONE W y B AQUI')
[red.IW{1,1},red.b{1}] = ginput(1);
title('Gráfico de Contorno del Error')
end
% FASE DE PRESENTACIÓN:
A=sim(red,P);
E=T-A;
SSE=sumsqr(E);
punto=plotep(red.IW{1,1},red.b{1},SSE);
pause(tiempopausa);
% ENTRENAMIENTO DE LA RED
%========================
% ENTRENAMIENTO DE LOS PARÁMETROS
presenta_frec = 1;
max_iteracion = 200;
meta_error = 0.001;
red.trainParam.goal = meta_error;
LP.lr = max_razon_aprendizaje;
% NOTA: El resto del código de entrenamiento puede reemplazarse
por:
%
% [red, tr]=train(red,P,T);
% iteracion = length(tr.epoch)-1;
% SSE = tr.perf(length(tr.perf));
%
% PARÁMETROS DE LA RED
W = red.IW{1,1};
B = red.b{1};
% REGISTRO DEL ENTRENAMIENTO
errores = [SSE];
for iteracion=1:max_iteracion
% FASE DE REVISIÓN:
if SSE < meta_error, iteracion=iteracion-1;
break,
end
LW = W; LB = B;
% FASE DE APRENDIZAJE:
dW = learnwh(W,P,[],[],[],[],E,[],[],[],LP,[]);
dB = learnwh(B,ones(1,Q),[],[],[],[],E,[],[],[],LP,[]);
W = W + dW; B = B + dB;
red.IW{1,1}=W;
red.b{1}=B;
% FASE DE PRESENTACIÓN
A=sim(red,P); E = T-A;
SSE = sumsqr(E);
% REGISTRO DEL ENTRENAMIENTO
errores = [errores SSE];
% PRESENTACIÓN DEL PROGRESO
if rem(iteracion,presenta_frec) == 0
punto=plotep(W,B,SSE,punto);
pause(tiempopausa);
drawnow
end
end
red.IW{1,1} = W;
red.b{1} = B;
% GRÁFICA DE CLASIFICACIÓN FINAL
%===============================
punto=plotep(W,B,SSE,punto);
pause
set(gcf,'NextPlot','replace')
% GRÁFICA DE LA CURVA DE ERROR
%=============================
semilogy(0:iteracion,errores,0:iteracion,meta_error*ones(1,iteracio
n+1));
title('Error de la Red')
xlabel('iteraciones')
ylabel('error cuadrado medio')
pause;
% GRÁFICA DE LOS ERRORES ASOCIADOS A CADA VECTOR DE SALIDA
%=========================================================
bar(T-A);
title('Error de cada vector de salida');
xlabel('Salida');
ylabel('error de cada salida');
pause
% RESUMEN DE RESULTADOS
%======================
fprintf('\nVALORES DE LA RED ENTRENADA:\n')
W
B
fprintf('Entrenada en %.0f iteraciones.\n',iteracion)
fprintf('La meta del error cuadrático medio fue%g.\n',meta_error);
fprintf('Error cuadrático medio final de %g.\n',SSE);
fprintf('La red entrenada opera: ');
if SSE < meta_error
disp('Adecuadamente.')
else
disp('Inadecuadamente.')
end

INTERFAS
Calculado la superficie de error, por favor espere...
Presione cualquier tecla para ver la superficie de error.

VALORES DE LA RED ENTRENADA:


W =
0.2205
B =
0.7569

Entrenada en 13 iteraciones.
La meta del error cuadrático medio fue0.001.
Error cuadrático medio final de 0.000572775.
La red entrenada opera: Adecuadamente.
CAMBIO DE LA TAZA DE APRENDIZAJE

Cree un archivo-m con el nombre de adeline2.m que obtenga una salida deseada para
cada uno de los datos a la entrada usando la arquitectura ADALINE:
Los datos de entrada son P = [+1.0 -1.2], las salidas deseadas son T = [+1.0 +0.5], el
peso inicial de la entrada es 1.6960, el peso de la entrada del umbral es -1.0052 y el
error cuadrático medio debe ser menor o igual a 0.001. Corra el programa para una
razón de aprendizaje de 0.9, 1.7 y 2.5 veces la máxima.

CÓDIGO:
% EJEMPLO ADALINE2: TAZA DE APRENDIZA MUY GRANDE
%Autor: Paredes Carpio, Wladimir
% máximo.El resultado es una red con problemas de aprendizaje.
clear all;close all;clc;
%help adaline2
clf reset
tiempopausa = 0.3;
% DEFINICIÓN DEL PROBLEMA
%========================
% Definición de los dos vectores de entrada de 1 elemento.
P = [+1.0 -1.2];
% Definición de los dos vectores deseados de 1 elemento.
T = [+0.5 +1.0];
% GRÁFICA DE MALLA DEL ERROR
%===========================
disp('Calculado la superficie de error, por favor espere...'),
disp('')
Wrango = -1:.1:1;
Brango = -1:.1:1;
SE = errsurf(P,T,Wrango,Brango,'purelin');
disp('Presione cualquier tecla para ver la superficie de error.'),
disp(''), pause
plotes(Wrango,Brango,SE);
figura=gcf;
subplot(1,2,1)
title('Gráfica de la Superficie de Error')
xlabel('Peso W');
ylabel('-Umbral B');
zlabel('Error Cuadrado Medio');
subplot(1,2,2)
title('Gráfico de Contorno del Error');
xlabel('Peso W');
ylabel('Umbral B');
pause
% INICIALIZACIÓN DE LA ARQUITECTURA DE LA RED
%============================================
% Encuentra el tamaño del vector de entrada R, el tamaño de la capa
S, el tamaño del lote Q.
[R,Q] = size(P); [S,Q] = size(T);
%
PR=[-2 2]; %rango del elemento de entrada.
ID=[0]; %Vector de Retraso de Entrada.
max_razon_aprendizaje = 0.4 * maxlinlr(P,'bias');
red=newlin(PR,S,ID,max_razon_aprendizaje);
% Inicialización de pesos y umbral.
z1 = menu('Inicializar Pesos y Umbral a:','Condiciones Iniciales en
la guía del estudiante','Marcar Valores con el Ratón/Teclas de
Desplazamiento sobre el graf. de contorno','Valores Aleatorios');
disp('');
if z1 == 1
red.IW{1,1} = [1.6960];
red.b{1} = [-1.0052];
elseif z1 == 3
red.inputweights{1,1}.initFcn = 'rands';
red.biases{1}.initFcn = 'rands';
red=init(red);
end
z2 = menu('Usar una taza de aprendizaje de:','0.9 * maxlinlr','1.7
* maxlinlr','2.5 * maxlinlr');
disp('')
% GRÁFICA DE CONTORNO DEL ERROR, CONDICIONES INICIALES, SOLUCIÓN
DISEÑADA
%=================================================================
figure(figura)
subplot(1,2,2)
axis('equal')
if z1 == 2
title('SELECIONE W y B AQUI')
[red.IW{1,1},red.b{1}] = ginput(1);
title('Gráfico de Contorno del Error')
end
% ENTRENAMIENTO DE LA RED
%========================
% ENTRENAMIENTO DE LOS PARÁMETROS
presenta_frec = 1;
max_iteracion = 30;
meta_error = 0.001;
red.trainParam.goal = meta_error;
if z2 == 1
% DISEÑO DE LA RED
%=================
PR=[-2 2]; %rango del elemento de entrada.
ID=[0]; %Vector de Retraso de Entrada.
max_razon_aprendizaje = 0.9 * maxlinlr(P,'bias');
red=newlin(PR,S,ID,max_razon_aprendizaje);
elseif z2 == 2
% DISEÑO DE LA RED
%=================
PR=[-2 2]; %rango del elemento de entrada.
ID=[0]; %Vector de Retraso de Entrada.
max_razon_aprendizaje = 1.7 * maxlinlr(P,'bias');
red=newlin(PR,S,ID,max_razon_aprendizaje);
else
% DISEÑO DE LA RED
%=================
PR=[-2 2]; %rango del elemento de entrada.
ID=[0]; %Vector de Retraso de Entrada.
max_razon_aprendizaje = 2.5 * maxlinlr(P,'bias');
red=newlin(PR,S,ID,max_razon_aprendizaje);
end
LP.lr = max_razon_aprendizaje;
% FASE DE PRESENTACIÓN:
A=sim(red,P); E=T-A;
SSE=sumsqr(E); punto=plotep(red.IW{1,1},red.b{1},SSE);
pause(tiempopausa);
% NOTA: El resto del código de entrenamiento puede reemplazarse
por:
% [red, tr]=train(red,P,T);
% iteracion = length(tr.epoch)-1;
% SSE = tr.perf(length(tr.perf));
%
% PARÁMETROS DE LA RED
W = red.IW{1,1};
B = red.b{1};
% REGISTRO DEL ENTRENAMIENTO
errores = [SSE];
for iteracion=1:max_iteracion
% FASE DE REVISIÓN:
if SSE < meta_error, iteracion=iteracion-1; break, end
LW = W; LB = B;
% FASE DE APRENDIZAJE:
dW = learnwh(W,P,[],[],[],[],E,[],[],[],LP,[]);
dB = learnwh(B,ones(1,Q),[],[],[],[],E,[],[],[],LP,[]);
W = W + dW; B = B + dB;
red.IW{1,1}=W;
red.b{1}=B;
% FASE DE PRESENTACIÓN
A=sim(red,P); E = T-A;
SSE = sumsqr(E);
% REGISTRO DEL ENTRENAMIENTO
errores = [errores SSE];
% PRESENTACIÓN DEL PROGRESO
if rem(iteracion,presenta_frec) == 0
punto=plotep(W,B,SSE,punto);
pause(tiempopausa);
drawnow
end
end
red.IW{1,1} = W;
red.b{1} = B;
% GRÁFICA DE CLASIFICACIÓN FINAL
%===============================
punto=plotep(W,B,SSE,punto);
pause
set(gcf,'NextPlot','replace')
% GRÁFICA DE LA CURVA DE ERROR
%=============================
semilogy(0:iteracion,errores,0:iteracion,meta_error*ones(1,iteracio
n+1));
title('Error de la Red')
xlabel('iteraciones')
ylabel('error cuadrado medio')
pause;
% GRÁFICA DE LOS ERRORES ASOCIADOS A CADA VECTOR DE SALIDA
%=========================================================
bar(T-A);
title('Error de cada vector de salida')
xlabel('Salida')
ylabel('error de cada salida')
pause
% RESUMEN DE RESULTADOS
%======================
fprintf('\nVALORES DE LA RED ENTRENADA:\n')
W
B
fprintf('Entrenada en %.0f iteraciones.\n',iteracion)
fprintf('La meta del error cuadrático medio fue%g.\n',meta_error);
fprintf('Error cuadrático medio final de %g.\n',SSE);
fprintf('La red entrenada opera: ');
if SSE < meta_error disp('Adecuadamente.')
else disp('Inadecuadamente.')
end

RESULTADOS:

Calculado la superficie de error, por favor espere...


Presione cualquier tecla para ver la superficie de error.

VALORES DE LA RED ENTRENADA:


W=

-0.2334
B=

0.7101

Entrenada en 3 iteraciones.
La meta del error cuadrático medio fue0.001.
Error cuadrático medio final de 0.000639509.
La red entrenada opera: Adecuadamente.

Calculado la superficie de error, por favor espere...


Presione cualquier tecla para ver la superficie de error.

VALORES DE LA RED ENTRENADA:


W=
-0.2451
B=
0.7342
Entrenada en 9 iteraciones.
La meta del error cuadrático medio fue0.001.
Error cuadrático medio final de 0.00091789.
La red entrenada opera: Adecuadamente.
Calculado la superficie de error, por favor espere...
Presione cualquier tecla para ver la superficie de error.

VALORES DE LA RED ENTRENADA:

W=
8.4394e+04
B=
-3.2627e+04

Entrenada en 30 iteraciones.
La meta del error cuadrático medio fue0.001.
Error cuadrático medio final de 2.0609e+10.
La red entrenada opera: Inadecuadamente.
4. CONCLUSIONES:

- Gracias a las redes neuronales podemos observar su forma de operar.


- Podemos realizar códigos en Matlab sobre redes neuronales y ver el
comportamiento de sí misma.
- Gracias a las arquitecturas ADALINE podemos obtener resultados de entradas de
pesos y umbrales con poco error.
- Dependiendo de las condiciones iniciales la red se puede comportar
adecuadamente como no adecuada.

También podría gustarte