Está en la página 1de 6

Facultad Ingeniería Electrónica y Mecatrónica

Práctica de Laboratorio Nº16


Redes Neuro_fuzzy
1. Objetivos.
- Analizar una red Neuro_fuzzy usando el método de gradiente descendente.
- Aprender a realizar aplicaciones con redes neuronales

2. Marco teórico
Una red Neuro_fuzzy asocia características de las Redes Neuronales con los
modelos difusos. Tiene como base neuronas independientes asociados a cada clase
de representación de un modelo de reconocimiento de patrones supervisado.
La función de pertenencia asocia los patrones de cada neurona representante de una
clase en el dominio del problema.

Figura 1 Red Neuro_fuzzy Sugeno de Orden Cero

La retropropagación (backpropagation) de errores es un algoritmo de aprendizaje


supervisado que se usa para entrenar redes neuronales artificiales. El algoritmo consiste
en minimizar un error (o suma del error cuadrático) por medio de gradiente
descendiente, por lo que la parte esencial del algoritmo es cálculo de las derivadas
parciales de dicho error con respecto a los parámetros de la red neuronal.
Una red neuronal usando el método de retropropagación permite entrenar mediante un
conjunto de ejemplo (entrada-salida) comúnmente denominado training set. Al haber
aprendido mediante este conjunto, se puede obtener una salida coherente para una
entrada determinada.
Como aplicación se usará el algoritmo de retropropagación con gradiente descendente
ajustando los parámetros de las funciones antecedentes y consecuentes para posicionar
un AGV (Vehículo guiado automáticamente).

3. Procedimiento.
Procedimiento del Sistema de Calidad (PSC) – ISO 9001
Facultad Ingeniería Electrónica y Mecatrónica

Considere que el universo de discurso está definido de 0 a 10 grados y la función de


pertenencia triangular “en posición apropiada” está en 5 grados.

clear all; x= [0: .5 :10]; % entrada


num_pts = size (x,2) ; % # de puntos
a= 5; % altura
b=4; % base
mu_i = trimf(x, [a-b/2 a a+b/2]);
plot(x, mu_i)
title ('En posición apropiada ')
xlabel ('Dirección en Grados ')
ylabel ('Grado de pertenencia ')

Figura 1. Posición del AGV

Para decidir si esta en el blanco indicado (sobre una escala de 1 - 10) considere el
sistema Sugeno de orden cero con una regla y r=10

Si el móvil está esta en posición entonces la "posibilidad de éxito " es 10 (r=10)

Suponer que tenemos experimentalmente calculada la superficie entrada/salida

Procedimiento del Sistema de Calidad (PSC) – ISO 9001


Facultad Ingeniería Electrónica y Mecatrónica

r= 10; % valor de “r”de la regla Sugeno de orden cero


y_t = mu_i*r; % Posibilidad de éxito
plot (x, y_t);
title ('Superficie de entrada/salida para el móvil');
axis ([-inf inf 0 10.5]);
xlabel ('Dirección (entrada)')
ylabel ('Posibilidad de éxito (salida)')

Figura 2. Dirección deseada del AGV

Los parámetros MF antecedentes de una MF triangular simétrica y los consecuentes “r”


valores serán optimizados usando gradiente descendente.
Usaremos datos de entrada-salida
MF =
a= 3, b=4 y r= 8

PASO1. PASO ADELANTE DE TODAS LAS ENTRADAS PARA CALCULAR LA


SALIDA.
% Parámetros iniciales MF
r=8; % valor inicial de r
a=3; % altura inicial
b=6; %valor inicial de la base
Procedimiento del Sistema de Calidad (PSC) – ISO 9001
Facultad Ingeniería Electrónica y Mecatrónica

mu_i = trimf(x, [a-b/2 a a+b/2]); % MF inicial


y= mu_i*r; % salida inicial
plot (x, y_t,x,y);
title ('Superficie entrada/salida');
axis ([-inf inf 0 10.5]);
text (2.5, 4.5, 'Inicial')
text ( 4.5, 6, 'Blanco')
xlabel ('Direccion (entrada)')
ylabel ('Posibilidad de éxito(salida)')

Figura 3

PASO 2. CALCULAR EL ERROR Y SSE PARA TODAS LAS ENTRADAS

e= y-y_t
SSE= sum (sum (e.^2))

SSE =
314.5556

PASO 3. CALCULAR LOS VECTORES GRADIENTE ( UNA ENTRADA , UNA


REGLA)
ind = find (abs(x-a) <= (b/2)); % Localiza índices bajo MF
delta_a=r*e(ind).*((2*sign(x(ind)-a))/b); % Deltas para puntos ind.
Procedimiento del Sistema de Calidad (PSC) – ISO 9001
Facultad Ingeniería Electrónica y Mecatrónica

delta_b=r*e(ind).*((1-mu_i (ind))/b);
delta_r=e(ind).*mu_i(ind);

PASO 4. ACTUALIZAR LOS PARÁMETROS CON LA REGLA DE


ACTUALIZACIÓN.
lr_a=.1;
lr_b=5;
lr_r=10
del_a=-((lr_a/(2*num_pts))*sum(delta_a));
del_b=-((lr_b/(2*num_pts))*sum(delta_b));
del_r=-((lr_r/(2*num_pts))*sum(delta_r))
a= a+del_a;
b= b+del_b;
r= r+del_r;

a=
3.7955
b=
4.3239
c=
5.8409

Veamos si el SSE es mejor


mu_i = trimf(x, [a-b/2 a a+b/2]);
y_new=mu_i*r; %Listo
e=y_t-y_new; %error
SSE(2)= sum (sum (e.^2)) %Suma cuadrado del error

SSE =
3145556 189.1447

El SSE fue reducido de 314 a 190 en un solo paso. Ahora veamos como se entrena
iterativamente un sistema fuzzy.

PASO 5: REPETIR PASOS DEL 1 AL 5

maxcycles=30;
SSEgoal=.5:
for i=2:maxcycles
mu_i = trimf(x, [a-b/2 a a+b/2]);
y_new=mu_i*r; %Salida
e=y_t-y_new; %error
SSE(i)= sum (sum (e.^2)) %Suma cuadrado del error
If SSE(i) < SSE_goal;break;end
ind = find (abs(x-a) <= (b/2));
Procedimiento del Sistema de Calidad (PSC) – ISO 9001
Facultad Ingeniería Electrónica y Mecatrónica

delta_a=r*e(ind).*((2*sign(x(ind)-a))/b); % Deltas para puntos ind.


delta_b=r*e(ind).*((1-mu_i (ind))/b);
delta_r=e(ind).*mu_i(ind);
del_a=-((lr_a/(2*num_pts))*sum(delta_a));
del_b=-((lr_b/(2*num_pts))*sum(delta_b));
del_r=-((lr_r/(2*num_pts))*sum(delta_r))
a= a+del_a;
b= b+del_b;
r= r+del_r;

Graficar los resultados


plot (x, y_t,x,y_new,x,y);
title ("Superficie de entrada/salida ");
axis ([0 10 0 10.5]);
text (2.5, 4.5, 'Inicial')
text ( 4.5, 6, 'Blanco')
text ( 4, 6.5, 'Final')
xlabel (‘ entrada’);
ylabel (‘salida')

Gráfico del error SSE

Semilogy (SSE); title (‘Registro de entrenamiento SSE’)


xlabel (‘ Epochs’);
ylabel (‘SSE')

Procedimiento del Sistema de Calidad (PSC) – ISO 9001

También podría gustarte