Académique Documents
Professionnel Documents
Culture Documents
Curso:
Profesor:
Ricardo Bustinza
Alumnos:
Lima 2014
(20104509A)
Tabla de contenido
1.
2.
3.
1.2.
1.3.
1.4.
1.5.
1.6.
Modelamiento ................................................................................................................... 11
2.2.
2.3.
Enunciado .......................................................................................................................... 15
3.2.
3.3.
3.4.
3.4.1.
3.4.2.
3.4.3.
3.4.4.
Figura 1.1.
1.1.
Modelo ARX
( )
Modelo Estndar I:
( )
En el problema propuesto se har uso de Modelo Estndar II, de modo que las
constantes K1,K2,K3 y K4 sern desconocidas, y(n) ser la salida de la red y los dems
trminos pertenecern al vector de entrada del sistema.
1.2.
Generacin de data
Figura 1.2.
Ahora, para separar las entradas del sistema como se mencion en la seccin
anterior, se crean vectores a partir de los ya existentes con intercalamiento distinto para
representar una determinada variable en uno o dos tiempos anteriores, esto es:
y=length(Salida(:,1));
e1=Entrada(2:1:(y-1));
e2=Entrada(1:1:(y-2));
s1=Salida(2:1:(y-1));
s2=Salida(1:1:(y-2));
s3=Salida(3:1:(y));
Inp=[ e1 e2 s1 s2];
entradas=Inp';
%u(k-1)
%u(k-2)
%y(k-1)
%y(k-2)
%y(k)
%vector de datos de entrada (black box)
En simulink esto es representado haciendo uso de los Unit Delay (z^-1) y un periodo
de muestreo Ts=0.05, de modo que:
(
( )
( )
Figura 1.3.
Estos cuatro valores, para cada unidad de tiempo, sern una entrada para la red
neuronal.
1.3.
Se har uso de una red neuronal multicapa con 4 entradas, 10 neuronas en la capa
oculta y una neurona en la capa de salida. La estructura es similar a la mostrada en la
seccin 4.5. El primer paso es definir las condiciones iniciales para los pesos y bias de
cada capa:
%Condiciones iniciales
W=randn(1,10); %pesos 1ra capa
W0=randn(1,1);%bias 1ra capa
V=randn(10,4); %pesos 2da capa
V0=randn(10,1);%bias 2da capa
0.8662 -0.4523
0.1147
0.1092
W0 = -0.7879
V=
1.1813
-0.2045
0.1547 -0.1981
0.6646
-0.1887 -0.5504
0.2941
1.6577
0.2771 -0.4985
0.1291 -0.5678
1.1188 -0.2848
0.6379 -0.8160
0.0207
0.2937
0.1084
-0.8443
1.1970
-0.4258
0.4949 -1.0763
0.5728
2.1896
-0.5494
1.6229
1.7263 -0.5695
0.3061 -0.4561
V0' =
-0.6655 -0.9319
1.4.
0.2068
0.3153
1.2907
1.1625 -0.3892
Ya se tiene entrenada la red, ahora se desea probar la respuesta ante una entrada
distinta, por ejemplo un step. En ese sentido se usa el mismo diagrama de bloques de la
Figura 1.1 unido al de la Figura 1.3, a este nuevo diagrama se le adicionar un cierto
nmero de operaciones matriciales que afectarn a las entradas del sistema con el fin de
obtener la salida correspondiente a la red neuronal entrenada. Pero primero se debe tener
en cuenta que para calcular la salida de la red neuronal, la operacin que se debe hacer
es la siguiente:
Z_inj=V*Entrada+V0; %salida capa oculta
Zj=purelin(Z_inj); %salida usando fcn purelin
Y_ink=W*Zj+W0; %salida capa final
Yk=purelin(Y_ink) %salida usando fcn purelin
Figura 1.4.
Por ltimo, el scope1 muestra la comparacin entre la salida real y la estimada segn
la red neuronal:
i=1
i=length(P)
1.5.
Al utilizar el toolbox de redes neuronales de Matlab, slo se necesita crear la red con
el comando newff, especificar el nmero de neuronas en cada capa, la funcin de
activacin a usar (en este caso se har una variacin y se trabajarn con una funcin
tansig para la capa oculta y purelin, para la capa de salida), el nmero de pocas mximo,
la tasa de aprendizaje, etc:
NO=10; %neuronas en la capa oculta
NS=1;
%neuronas en la capa de salida
red=newff(minmax(entradas),[NO NS],{'tansig','purelin'},'trainlm');
red.trainParam.show=20;
red.trainParam.epochs=100;
red.trainParam.goal=0.0000001;
red.trainParam.lr=0.01;
Luego de creada la red sta puede ser entrenada especificando el vector target (s3
en este caso):
red=train(red,entradas,s3');
Ts=0.05;
gensim(red,Ts);
1.6.
Al igual que en la seccin 1.4 se aade la red neuronal al sistema, pero al contar con
el bloque compacto de dicha red neuronal ya no es necesario especificar todas las
operaciones matriciales que involucra el paso de capa a capa:
Figura 1.6.
El resultado del scope1 ser la comparacin entre la salida real y la estimada:
Figura 1.7.
Se puede decir que el caso de la Figura 1.5 (sin TRN) presenta mayor mimetismo que
el de la Figura 1.7 (con TRN) slo debido a la combinacin de funciones que se eligi. Por
lo tanto se concluye que para este problema en particular, la mejor opcin para ambas
funciones de activacin es purelin.
)(
(
)(
)(
)(
)(
)(
)(
)(
)(
)(
)(
)
)
Entrene la red MLP de modo que resuelva la clasificacin de los patrones para las
tres clases.
Clase 3
Clase 1
Clase 1
Clase 2
Clase 3
Figura 2.1.
2.1.
Modelamiento
Para el sistema se considerar como entrada a cada par de puntos, de modo que el
vector de entrada P es:
P=[-3 -2 -2 2 2 4 -1
0 -1 1 1 -1 0 0
0
0.5
0
-0.5
1 0 0
0 -2 -1
0
1
0
2];
Como ya se decidi usar dos neuronas en la capa de salida, ahora se tiene que elegir
el tipo de salida que corresponde a cada clase, esto es elegir la combinacin de T1 y T2
(salidas) corresponde a cada clase. Para ello cabe resaltar que a la salida del sistema se
har uso de una funcin hardlim para normalizar los resultados. Entonces, las
combinaciones elegidas son:
Clase 1
Clase 2
Clase 3
2.2.
T1
T2
0
0
1
0
Algoritmo de aprendizaje
El algoritmo tendr el mismo principio que el usado en la seccin 1.3, con ciertas
modificaciones debidas al cambio en el nmero de salidas. Primero, se asignan
condiciones iniciales a los vectores de pesos y bias, considerando que sta vez el nmero
de filas del vector W ser igual a 2. Para el entrenamiento se eleigi un alpha igual a 0.02
y un nmero de pocas de 35000.
W=randn(2,2); %pesos 1ra capa
W0=randn(1);%bias 1ra capa
V=randn(2,2); %pesos 2da capa
V0=randn(2,1);%bias 2da capa
donde
es el delta para una neurona j, el nmero de neuronas en la capa de salida,
es el gradiente de la neurona k de la capa superior y w_jk el peso de dicha neurona de
ndice j.k.
Por ltimo, la actualizacin de los pesos de las neuronas de la ltima capa tambin
cambiar a la siguiente forma:
dW=alpha*(Zj*[delta_1 delta_2])';
dW0=alpha*[delta_1 delta_2]';
2.3.
Algoritmo de aprendizaje
Luego de entrenada la red, se procede a ingresar algn dato para evaluar la clase a
la que pertenece. Para ello se usa el siguiente cdigo:
Z_inj=V*[resp1;resp2]+V0;
Zj=tanh(Z_inj);
Donde resp1 y resp2 son las coordenadas X e Y que el usuario ingresa desde un
input en la ventana de Matlab. Finalmente, teniendo los valores del vector de salida se
procede a evaluar la clase a la que corresponde dicha salida en base a la tabla mostrada
en la seccin 2.1. A continuacin se muestran algunos resultados:
Figura 2.2.
Cabe resaltar que el sistema no logra estabilizarse con un error en todas las
ejecuciones del algoritmo, por lo que el sistema no siempre clasifica del modo deseado,
ya que un error de 0.2 o 0.1 unido a la funcin hardlim (o round) es decisivo a la hora de
clasificar coordenadas que estn cerca del lmite. El desempeo del sistema depender
principalmente de los valores de los pesos iniciales; en caso de que se elijan valores
aleatorios, estos debern ser muy pequeos para un mejor desempeo.
3.1. Enunciado
Se tiene un termistor NTC y una DAQ 6008 con los cuales se pretende realizar
una adquisicin de datos de temperatura. El objetivo es que la data adquirida sirva para
obtener pares de Resistencia-Temperatura, los cuales sern introducidos a una red
neuronal con el objetivo de que sta aprenda la relacin existente entre resistencia y
temperatura para que luego sea capaz de calcular la respuesta aproximada de
temperatura ante una entrada de resistencia distinta a los datos proporcionados
inicialmente.
R1
10K
R
10K25C
donde
. Despejando se obtiene:
Los datos se adquirirn mediante una interfaz de Labview, haciendo uso del
paquete DAQ-Assistant. Se tomarn 45 muestras de voltaje cada medio segundo, usando
la ecuacin anterior se calcular el correspondiente valor de resistencia; dicha data se
guardar en el archivo datantc3.lvm (R vs tiempo). Para que la lectura abarque la mayor
cantidad de valores de resistencia posibles se calentar lentamente el termistor con un
encendedor. Debido a la naturaleza del NTC, la resistencia inicial ser mayor a 10K
(11Kohms para precisar, ya que la temperatura ambiente estuvo por debajo de los 25 C)
y disminuir a medida que el termistor se caliente.
[ (
)]
Con esta nueva data es posible obtener las grficas de RvsT, R vs tiempo y T vs
tiempo:
Figura 4.4.
V0(1)
V(1)
V0(2)
V(2)
V0(3)
V(3)
W0
Yk
V0(4)
V(4)
W(1x7)
V0(5)
V(5)
V0(6)
V(6)
V0(7)
V(7)
En este punto cabe sealar que al haber elegido a la temperatura (T) como
entrada y a la funcin sigmoidal como su funcin de activacin, es necesario limitar el
vector de entrada (P) a valores entre 0 y 1, ya que de lo contrario la salida de la funcin
de activacin sera siempre igual a 1. En ese sentido, previamente se tuvo que haber
definido al vector como: P=T'/max(T), de modo que los valores de entrada no excedan a
1. Por otro lado, para la funcin de activacin de la capa de salida se eligi una funcin
purelin debido a que los valores de salida estn entre 0 y 12 y es ms fcil manejar ste
intervalo que uno limitado entre 0 y 1. De modo que para elegir el vector target (T1)
simplemente se lo defini como: T1=R'.
Una vez que se conoce el error se procede a calcular los gradientes (deltas)
correspondientes a cada neurona. Para la capa de salida (de una sola neurona) dicho
delta se calculara como:
(
)
(
donde
es el gradiente de la neurona en cuestin,
y el coeficiente de aprendizaje.
)
las salidas de la capa anterior
( )
Figura 4.6.
3.2374
5.2930
6.3773
W0 =
3.6648
8.2911
3.7379 11.1209
0.6419
1.5626
6.7235 10.1993
2.3732 18.8483
3.2415 27.1780
Figura 4.7.
Figura 4.8.
Por otro lado resulta interesante obviar la data inicial por un momento y considerar
una data generada simplemente con la funcin que relaciona R-T; es decir:
R=(1:0.01:11.5)';
TR=298;
beta=3977;
R25=10;
V1=2.5;
for i=1:length(R)
T(i,1)=(1/TR+(1/beta)*log(R(i)/R25))^-1;
end
t=(1:0.01:11.5)' ,
debido a que al usar data con intervalos iguales, se tiene menos concentracin de
puntos en cierta zona de la grfica y se reduce el efecto de recta anteriormente descrito.
La Figura 4.9 muestra el resultado del mismo principio usado anteriormente (en la Figura
4.8) pero con la nueva data generada para 5000 pocas, como se puede ver hay una
significante mejora.
Figura 4.9.
Ahora se procede a crear la red con estos datos y considerando una funcin de
activacin tansig para la capa oculta y purelin para la capa de salida, debido a que el
rango de temperatura (salida) va desde 290 a 360K. Se entrenar la red con un mximo
de 8000 pocas:
net=newff(P,T,NS,{'tansig', 'purelin'},'trainlm');
net.trainParam.epochs=8000;
[net,tr]=train(net,P,T);
Figura 4.11.
Como se observa, los resultados coinciden con la data original.
Figura 4.11.