Enunciados.

Anuncio
PRÁCTICAS DE LABORATORIO
Redes Recurrentes y Autónomas
29-03-07
________________________________________________________________________
PRÁCTICA 1
Analiza la evolución de la red recurrente binaria cuya matriz de pesos sinápticos viene dada en la figura 1(a) y sus
valores umbrales son todos iguales a uno.
0
0.0582 -0.4839 0.1267 -0.5362
0.0582
0
-0.9408 0.2464 -1.0426
-0.4839 -0.9408
0
-2.0496 8.6721
0.1267 0.2464 -2.0496
0
-2.2713
-0.5362 -1.0426 8.6721 -2.2713
0
(a)
(b)
Figura 1. a) Matriz de pesos sinápticos. b) Imagen de la matriz.
Explica por qué una solución óptima debe ser la representada en la figura 2 en términos del consenso de los estados de
las neuronas según los valores de los pesos sinápticos de las conexiones.
Figura 2. Solución óptima.
PRÁCTICA 2
Construye una red recurrente y binaria de 100 unidades de proceso (neuronas), cuyos pesos sinápticos y umbrales sean
números aleatorios del intervalo [-1,1], siguiendo una dinámica de computación secuencial (asíncrona) con elección
aleatoria de las neuronas (figura 3). Analiza el comportamiento de la función de energía conforme aumenta el número
de actualizaciones (figura 4). ¿Cuántos ciclos (épocas) de actualizaciones neuronales han sido necesarios para la
estabilización de la red? Interpreta la configuración final de la red según los valores de los pesos sinápticos (figura 5).
Figura 3. Mapa de los pesos sinápticos. Figura 4. Evolución de la energía computacional.
Figura 5. Una configuración final para 100 neuronas.
PRÁCTICA 3
Construye una red recurrente y binaria de 100 unidades de proceso (neuronas), cuyos pesos sinápticos y umbrales sean
números aleatorios del intervalo [-1,1], siguiendo una dinámica de computación paralela (sincronizada). Analiza el
comportamiento de la función de energía conforme aumenta el número de actualizaciones (figura 6). ¿Se estabiliza la
red?
Figura 6. Evolución de la energía computacional.
PRÁCTICAS DE LABORATORIO
Redes Recurrentes y Autónomas
29-03-07
________________________________________________________________________
PRÁCTICA 4
Diseña una red de Hopfield que determine el menor de 100 números, x1 , x2 ,..., x100 , generados
aleatoriamente en el intervalo [0, 1]. Comprueba que los parámetros de la red pueden son: wij = −2λ , i ≠ j ,
siendo λ el parámetro de penalización, wii = 0, θ i = xi − λ , i, j=1,2,…,100. ¿Determina siempre la red el
valor menor (mínimo global)? ¿Por qué? ¿Cómo actualizarías las unidades de proceso para conseguir que la
red siempre alcance el valor mínimo?
PRÁCTICA 5
Se considera el siguiente Problema de localización: Dado un grafo con N vértices (puntos de demanda), se
trata de determinar el vértice (centro de servicio) que minimiza la suma total de las distancias a cada uno de
los vértices del grafo. Diseña una red de Hopfield para encontrar dicho vértice (llamado mediana del grafo).
¿Se puede utilizar la red anterior?
PRÁCTICA 6
Problema de video-vigilancia (cobertura): Una zona céntrica de una ciudad se representa por un grafo en
el que los cruces de calles constituyen sus vértices y las aristas son los tramos de calle entre dos cruces. Se
desea seleccionar el conjunto de vértices de menor tamaño que garantice que cualquier arista del grafo incide
sobre algún vértice de dicho conjunto. Diseña una red de Hopfield binaria para el grafo que viene en la
figura 7 junto a su matriz de adyacencia.
⎛0
⎜
⎜1
⎜0
⎜
⎜1
⎜0
⎜
⎜0
⎜0
⎜
⎜0
⎜
⎜0
⎜0
⎜
⎜0
⎜0
⎜⎜
⎝0
13
11
12
10
9
8
7
6
3
5
4
2
1
1
0
1
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
1
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0
1
0
1
0
0
1
0
0
0
0
0
1
0
0
1
0
1
0
0
1
0
0
0
0
0
1
0
0
1
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
1
0
0
1
0
1
0
1
0
0
0
0
0
0
1
0
0
1
0
1
0
1
0
0
0
0
0
0
1
0
0
1
0
0
1
0
0
0
0
0
0
0
1
1
0
0
0
1
0⎞
⎟
0⎟
0⎟
⎟
0⎟
0⎟
⎟
0⎟
0⎟
⎟
0⎟
⎟
0⎟
1⎟
⎟
1⎟
1⎟
⎟
0 ⎠⎟
Figura 7. Grafo y su matriz de adyacencia.
Comprueba que los parámetros de la red pueden son: wij = −2λ aij , ∀ i ≠ j , siendo λ el parámetro de
penalización y aij el elemento
θ i = 1 − 2λ ni , i, j = 1, 2,..., N .
(i,j)
de
la
matriz
de
adyacencia
del
grafo,
wii = 0,
PRÁCTICA 7
Diseño de un convertidor analógico-digital: Se trata de convertir (aproximar) cualquier valor de una señal
7
analógica (continua) z(t)∈ [0, 255] en la representación binaria de 8 bits, zˆ(t ) = ∑ 2i xi , con xi ∈ {0,1},
i =0
i=0,1,2,…,7, que mejor aproxima a z(t). Por lo tanto, el objetivo es minimizar el error de representación que
viene dado por la expresión:
2
7
⎛
⎞
E (t ) = ⎜ z − ∑ 2i xi ⎟
i =0
⎝
⎠
Diseña una red de Hopfield para encontrar los valores x0 , x1 ,..., x7 que conduce a la mejor aproximación de
z(t).
PRÁCTICAS DE LABORATORIO
El Perceptrón simple: neuronas binarias
19-04-2007
________________________________________________________________________
PRÁCTICA 1
Construcción de una neurona binaria
Se va a construir una red neuronal con una única neurona que tiene una función paso (escalón), como
función de transferencia, y dos sensores de entrada. Sus entradas van a ser números reales del intervalo
[−5,5]:
net=newp([-5 5;-5 5],1,’hardlim’)
% ([Matriz de valores mínimos y máximos de las entradas], Número de neuronas, Función de
•
transferencia)
Su matriz de pesos sinápticos va ser W=[2 -1] y el umbral b=1.5:
net.IW{1,1}=[2 -1];
net.b{1}=1.5;
•
Valores de salida de la neurona lineal para cada una de las entradas del conjunto
⎧⎪ ⎡1 ⎤ ⎡ −2 ⎤ ⎡3 ⎤ ⎡ −1⎤ ⎫⎪
C = ⎨⎢ ⎥ , ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎬ :
⎪⎩ ⎣3⎦ ⎣ 2 ⎦ ⎣ −4 ⎦ ⎣ −3⎦ ⎪⎭
P=[1 -2 3 -1; 3 2 -4 -3];
S=sim(net,P);
SOLUCIÓN:
________________________________________________________________________________
si 2 x1 − x2 ≥ −1.5
⎧1
y=⎨
si 2 x1 − x2 < −1.5
⎩0
Salidas de la red para cada uno de las entradas del conjunto C:
Función que define la neurona binaria:
⎡1 ⎤
⎡ −2 ⎤
⎡3 ⎤
⎡ −1 ⎤
⎢3⎥ → 1; ⎢ 2 ⎥ → 0; ⎢ −4 ⎥ → 1 ⎢ −3⎥ → 1
⎣ ⎦
⎣ ⎦
⎣ ⎦
⎣ ⎦
________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
PRÁCTICA 2
Construcción de una neurona bipolar
Se va a construir una red neuronal con una única neurona que tiene la función signo, como función de
transferencia, y dos sensores de entrada. Sus entradas van a ser números reales del intervalo [−5,5]:
net=newp([-5 5;-5 5],1,’hardlims’)
% ([Matriz de valores mínimos y máximos de las entradas], Número de neuronas, Función de
•
transferencia)
Su matriz de pesos sinápticos va ser W=[2 -1] y el umbral b=1.5:
net.IW{1,1}=[2 -1];
net.b{1}=1.5;
•
Valores de salida de la neurona lineal para cada una de las entradas del conjunto
⎧⎪ ⎡1 ⎤ ⎡ −2 ⎤ ⎡3 ⎤ ⎡ −1⎤ ⎫⎪
C = ⎨⎢ ⎥ , ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎬ :
⎩⎪ ⎣3⎦ ⎣ 2 ⎦ ⎣ −4 ⎦ ⎣ −3⎦ ⎭⎪
P=[1 -2 3 -1; 3 2 -4 -3];
S=sim(net,P)
SOLUCIÓN:
________________________________________________________________________________
si 2 x1 − x2 ≥ −1.5
⎧1
y=⎨
si 2 x1 − x2 < −1.5
⎩−1
Salidas de la red para cada uno de las entradas del conjunto C:
Función que define la neurona bipolar:
⎡1 ⎤
⎡ −2 ⎤
⎡3 ⎤
⎡ −1 ⎤
⎢3⎥ → 1; ⎢ 2 ⎥ → −1; ⎢ −4 ⎥ → 1 ⎢ −3⎥ → 1
⎣ ⎦
⎣ ⎦
⎣ ⎦
⎣ ⎦
________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
PRÁCTICA 3
Aprendizaje con el Perceptrón: Implementación de la Función lógica OR
Se va diseña un perceptrón simple que implemente la función lógica “OR” con dos entradas y una única
neurona de salida.
El conjunto de los 4 patrones de entrada (bidimensionales) viene dado la matriz
⎡1 1 0 0 ⎤
P=⎢
⎥ y sus correspondientes salidas deseadas vienen dadas por el vector
⎣1 0 1 0 ⎦
T =[ 1 1 1 0 ].
•
Construcción de la red inicial como un objeto estructurado:
net = newp([0,1;0 1], 1,’hardlim’,’learnp’); % No es necesario especificar
%'hardlim','learnp', las toma por defecto
% newp([matriz de valores mínimos y máximos de las entradas], Número de neuronas, ‘Función
%de Transferencia’, ‘Regla de Aprendizaje)
•
Valores iniciales aleatorios de los pesos y del umbral de la red
net.IW{1,1}=[rands(1) rands(1)];
net.b{1}=rands(1);
•
% También puede ser net=init(net);
Entrenamiento de la red:
net.trainParam.epochs = 20;
net.trainParam.goal = 0;
% Número máximo de épocas
% Error admisible
[net, tr, Y, E]= train(net, P, T)
•
Salidas Y de la red para las entradas P y el error E cometido :
S= sim(net, P)
•
Presentación de los parámetros de la red
net.IW{1}
net.b{1}
mae(S-T)
% se presentan los pesos sinápticos de la red
% se presenta el sesgo de la red
% se presenta el error absoluto medio. ‘mse’ nos da el error cuadrático medio
SOLUCIÓN:
________________________________________________________________________________
⎧1
y=⎨
⎩0
x1
si 1.35 x1 + 0.81x2 ≥ 0.52
si
1.35x1 + 0.81x2 < 0.52
1.35
y
x2
0.81
- 0.52
Figura 8. Patrones y recta de separación
Figura 9. Función implementada (OR)
________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
PRÁCTICA 4 Aprendizaje con el Perceptrón: Clasificación con datos de huracanes
Se dispone de un conjunto de datos correspondientes a la longitud y latitud de 37 puntos geográficos, junto
con el tipo de huracán que han padecido (baroclínico o tropical del Atlántico Norte). Se va a diseñar un
perceptrón con dos entradas y una neurona de salida para predecir el tipo de huracán según la longitud y
latitud de un punto geográfico.
• Conjunto de patrones de entrenamiento
load huracanes
•
Creación del Perceptrón de dos sensores de entrada y una neurona de salida.
net = newp(minmax(P),1,'hardlim','learnp');
%minmax(P) nos da el valor mínimo y el valor máximo de cada fila de P
net = init(net); % Valores aleatorios iniciales de los parámetros
•
Entrenamiento de la red
net.trainParam.epochs = 20;
net.trainParam.show = 5;
net.trainParam.goal = 0.1;
net.trainFcn='trainc';
% Número máximo de épocas de entrenamiento
% Se muestra resultado cada 5 épocas
% Error admisible
% Entrenamiento on line. También puede ser en lotes: 'trainb'
net = train(net,P,T);
•
Salidas de la
entrenamiento
red
cuando
las
entradas
corresponde
al
conjunto
de
S= sim(net,P)
•
Valores después del entrenamiento de los pesos sinápticos, del umbral y
del error absoluto medio por neurona
net.IW{1}
net.b{1}
mae(S-T)
% se presentan los pesos sinápticos de la red
% se presenta el sesgo de la red
% se presenta el error absoluto medio. ‘mse’ nos da el error cuadrático medio
SOLUCIÓN:
________________________________________________________________________________
⎧1
y=⎨
⎩0
x1
si
36x1 − 32 x2 ≥ 1
si
36x1 − 32 x2 < 1
36
y
x2
Fig. 10 Evolución del error (mse)
Fig. 11. Recta de separación
-32
Figura 12. Clasificador neuronal
Error absoluto medio = 0.4865 (inaceptable). Los datos no son linealmente separables.
________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
PRÁCTICA 5 Aprendizaje con el Perceptrón: Predicción de la diabetes (datos Pima)
Se trata de decidir si una persona tiene diabetes a partir de 7 datos personales. Para ello se dispone de las
siguientes características de 200 mujeres indias mayores de 21 años que vivían cerca de Phoenix (Arizona)
con el fin de estudiar la diabetes de acuerdo a los criterios de la Organización Mundial de la Salud: Nº de
embarazos, concentración de glucosa en plasma, presión sanguínea diastólica, insulina, índice de masa
corporal, función de antecedentes familiares diabéticos, edad y tipo (diabética o no). Se va a diseñar un
Perceptrón simple con el fin de diagnosticar, según estas características, si una mujer es, o no, diabética.
• Cargas los datos
load pima
• Creación del perceptrón con siete sensores de entrada y una salida:
net = newp([minmax(P)], 1,'hardlim','learnp')
• Inicializar la red:
net=init(net);
• Especificación de parámetros de entrenamiento:
net.trainFcn='trainc';
% Entrenamiento en línea. También puede poner
% por lotes: 'trainb’
net.trainParam.epochs=50; % Número total de épocas de entrenamiento
net.trainParam.goal=0.10; % Error máximo que se pretende alcanzar
net.trainParam.show=10;
% Frecuencia de presentación de los gráficos
• Entrenamiento de la red:
[net, tr,Y,E]= train(net, P, T);
• Salidas Y de la red para las entradas P y error E cometido:
Y= sim(net, P);
train_error=mae(Y-T);
• El mejor tiempo para parar de entrenar:
[mim_perf,min_epoch]=min(tr.perf)
• Presentación de los parámetros de la red
net.IW{1}
net.b{1}
mae(Y-T)
SOLUCIÓN:
________________________________________________________________________________
⎧1
y=⎨
⎩0
si
842x1 + 78 x2 − 467 x3 + 434 x4 − 201.4 x5 + 187 x6 + 211x7 ≥ 182
si
842x1 + 78 x2 − 467 x3 + 434 x4 − 201.4 x5 + 187 x6 + 211x7 < 182
Clasificador Neuronal
Fig. 13. Evolución del error (eam)
Fig. 14. Datos Proyectados
Error absoluto medio = 0.30 (inaceptable). Lo datos no son separables linealmente.
________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
La ADALINA: neuronas lineales
10-05-2007
________________________________________________________________________
PRÁCTICA 1
Construcción de una neurona lineal
Se va a construir una red neuronal con una única neurona que tiene una función lineal, como función de
transferencia, y dos sensores de entrada. Sus entradas van a ser números reales del intervalo [−5,5]:
net=newlin([-5 5;-5 5],1);
•
% ([Matriz de valores mínimos y máximos de las entradas], Número de
% neuronas)
Su matriz de pesos sinápticos va a ser W=[2 -1] y el umbral b=1.5:
net.IW{1,1}=[2 -1];
net.b{1}=1.5;
•
Se trata de determinar los valores de salida de la neurona lineal para cada una de las entradas del
conjunto
⎪⎧ ⎡1 ⎤ ⎡ −2 ⎤ ⎡3 ⎤ ⎡ −1⎤ ⎫⎪
C = ⎨⎢ ⎥ , ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎬ :
⎩⎪ ⎣3⎦ ⎣ 2 ⎦ ⎣ −4 ⎦ ⎣ −3⎦ ⎭⎪
P=[1 -2 3 -1; 3 2 -4 -3];
S=sim(net,P)
SOLUCIÓN:
________________________________________________________________________________
Función que define la neurona lineal: y = 2 x1 − x2 + 1.5
Salidas de la red para cada uno de las entradas del conjunto C:
⎡1 ⎤
⎡ −2 ⎤
⎡3 ⎤
⎡ −1 ⎤
⎢3⎥ → 0.5; ⎢ 2 ⎥ → −4.5; ⎢ −4 ⎥ → 11.5 ⎢ −3⎥ → 2.5
⎣ ⎦
⎣ ⎦
⎣ ⎦
⎣ ⎦
________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
PRÁCTICA 2 La ADALINA: Aproximación lineal
Se va a determinar la función lineal que mejor representa la relación funcional entre el conjunto de patrones
de entrada dados por las columnas de la matriz
P=[-2 -1 0 0 1 2; 1 -2 1 -1 2 1] y el conjunto de salidas respectivas dadas por la matriz
T=[-2 3 2 4 3 6];
•
Construcción de la red inicial como un objeto estructurado:
net = newlin([-2,2;-2 2], 1,0,0.01);
% newlin([matriz de valores mínimos y máximos
% de las entradas], Número de neuronas, Retardo de la entrada, Tasa de Aprendizaje)
•
Entrenamiento de la Adalina:
net.trainParam.goal= 0.0001;
net.trainParam.epochs=200;
[net,TR,Y,E] = train(net,P,T); % TR : registro de entrenamiento ; Y: salida; E: errores
•
Simulación de las salidas Y de la red para las entradas P y errores medios cometidos :
S= sim(net,P)
ErrorMedioSalida=mae(T-S)
% sum(abs(T-S))/6
ErrorMedioclasif=(T-sign(S)) % Error medio del clasificador
•
Presentación de los parámetros de la red
net.IW{1}
net.b{1}
•
Representación gráfica de la función implementada
x=-1:0.2:1;
y=x;
[X,Y]=meshgrid(x,y);
Z=w(1)*X+w(2)*Y+b;
mesh(X,Y,Z)
hold on
plot3(P(1,:),P(2,:),T,'*k')
SOLUCIÓN:
______________________________________________________________________
Función lineal implementada: y = 2 x1 − x2 + 3
Fig. 15. Decrecimiento del error
Fig. 16. Gráfica de la función lineal
______________________________________________________________________
PRÁCTICAS DE LABORATORIO
PRÁCTICA 3 La ADALINA: Clasificación de patrones
Se va a diseñar una ADALINA que permita clasificar los 4 patrones dados por las columnas de la matriz de
entradas
⎡1 1 −1 −1⎤
P=⎢
⎥ , y sus correspondientes salidas deseadas (clases) vienen dadas por el vector
⎣1 −1 1 −1⎦
T = [ 1 1 1 −1 ] .
•
Construcción de la red inicial como un objeto estructurado:
net = newlin([-1,1;-1 1], 1,0,0.01); % newlin([matriz de valores mínimos y máximos
%de las entradas], Número de neuronas, Retardo de la entrada, ‘Tasa de Aprendizaje)
%También se puede poner newlin [mínmax(P)], size(T,1),..) para crear el Adaline directamente
•
Entrenamiento de la Adalina:
net.trainParam.epochs = 100;
net.trainParam.goal=0.1;
[net,TR,Y,E] = train(net,P,T);
•
Salidas Y de la red para las entradas P y el error E cometido :
S= sim(net,P)
•
Presentación de los parámetros de la red
net.IW{1}
net.b{1}
errorsalida=mae(T-S)
%sum(abs(T-S))/4
errorclasificacion=mae(T-sign(S));
•
Representación gráfica
x=-1:0.2:1;
y=x;
[X,Y]=meshgrid(x,y);
Z=w(1)*X+w(2)*Y+b;
mesh(X,Y,Z)
hold on
plot3(P(1,:),P(2,:),T,'*k')
SOLUCIÓN:
______________________________________________________________________
Función lineal implementada: y = 0.5 x1 + 0.5 x2 + 0.5
Salidas de la red para cada uno de las entradas (columnas de P):
⎡1⎤
⎢1⎥ → 1.5;
⎣ ⎦
⎡1 ⎤
⎢ −1⎥ → −0.5;
⎣ ⎦
⎡ −1⎤
⎢1 ⎥ → 0.5;
⎣ ⎦
⎡ −1⎤
⎢ −1⎥ → −0.5
⎣ ⎦
Salidas del clasificador:
⎡1⎤
⎡1 ⎤
⎡ −1⎤
⎡ −1⎤
⎢1⎥ → 1; ⎢ −1⎥ → 1; ⎢1 ⎥ → 1; ⎢ −1⎥ → −1
⎣ ⎦
⎣ ⎦
⎣ ⎦
⎣ ⎦
______________________________________________________________________
PRÁCTICAS DE LABORATORIO
El Perceptrón multicapa: neuronas sigmoideas
10-05-2007
________________________________________________________________________
PRÁCTICA 1
Construcción de una neurona logística
Se va a construir una red neuronal con una única neurona que tiene la función logística, como función de
transferencia, y dos sensores de entrada. Sus entradas van a ser números reales del intervalo [−5,5]:
net=newp([-5 5;-5 5],1,’logsig’)
% ([Matriz de valores mínimos y máximos de las entradas], Número de neuronas, Función de
•
transferencia)
Su matriz de pesos sinápticos va ser W=[2 -1] y el umbral b=1.5:
net.IW{1,1}=[2 -1];
net.b{1}=1.5;
•
Valores de salida de la neurona lineal para cada una de las entradas del conjunto
⎧⎪ ⎡1 ⎤ ⎡ −2 ⎤ ⎡3 ⎤ ⎡ −1⎤ ⎫⎪
C = ⎨⎢ ⎥ , ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎬ :
⎩⎪ ⎣3⎦ ⎣ 2 ⎦ ⎣ −4 ⎦ ⎣ −3⎦ ⎭⎪
P=[1 -2 3 -1; 3 2 -4 -3];
S=sim(net,P)
SOLUCIÓN:
________________________________________________________________________________
Función que define la neurona logística:
y=
1
− ( 2 x1 − x2 +1.5 )
1+ e
Salidas de la red para cada uno de las entradas del conjunto C:
⎡1 ⎤
⎡ −2 ⎤
⎡3 ⎤
⎡ −1⎤
⎢3⎥ → 0.6225; ⎢ 2 ⎥ → 0.0110; ⎢ −4 ⎥ → 1.000 ⎢ −3⎥ → 0.9241
⎣ ⎦
⎣ ⎦
⎣ ⎦
⎣ ⎦
________________________________________________________________________________
PRÁCTICA 2
Construcción de una neurona tangente hiperbólica
Se va a construir una red neuronal con una única neurona que tiene la función logística, como función de
transferencia, y dos sensores de entrada. Sus entradas van a ser números reales del intervalo [−5,5]:
net=newp([-5 5;-5 5],1,’tansig’)
% ([Matriz de valores mínimos y máximos de las entradas], Número de neuronas, Función de
•
Su matriz de pesos sinápticos va ser W=[2 -1] y el umbral b=1.5:
net.IW{1,1}=[2 -1];
net.b{1}=1.5;
•
Valores de salida de la neurona lineal para cada una de las entradas del conjunto
⎧⎪ ⎡1 ⎤ ⎡ −2 ⎤ ⎡3 ⎤ ⎡ −1⎤ ⎫⎪
C = ⎨⎢ ⎥ , ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎬
⎩⎪ ⎣3⎦ ⎣ 2 ⎦ ⎣ −4 ⎦ ⎣ −3⎦ ⎭⎪
P=[1 -2 3 -1; 3 2 -4 -3];
S=sim(net,P)
transferencia)
PRÁCTICAS DE LABORATORIO
SOLUCIÓN:
________________________________________________________________________________
Función que define la neurona tangente hiperbólica:
y=
e( 2 x1 − x2 +1.5) − e −( 2 x1 − x2 +1.5)
e( 2 x1 − x2 +1.5) + e −( 2 x1 − x2 +1.5)
Salidas de la red para cada uno de las entradas del conjunto C:
⎡1 ⎤
⎡ −2 ⎤
⎡3 ⎤
⎡ −1⎤
⎢3⎥ → 0.4621; ⎢ 2 ⎥ → −0.9998; ⎢ −4 ⎥ → 1.000; ⎢ −3⎥ → 0.9866
⎣ ⎦
⎣ ⎦
⎣ ⎦
⎣ ⎦
________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
PRÁCTICA 3
PERCEPTRÓN MULTICAPA: Predicción de la diabetes
Se va a diseñar un Perceptrón con una capa oculta de neuronas y una neurona de salida con el fin de
diagnosticar si una mujer es, o no, diabética, según las 7 primeras características de los datos Pima.
• Carga de datos
load pima
• Preprocesado de los datos
[pn,minp,maxp,tn,mint,maxt]=premnmx(P,T); % Se normalizan los datos en el intervalo [-1,1]
%[pn,meanp,stop,tn,meant,stdt]=prestd(P,T); Para tipificar los datos de entrada
• Creación del Perceptrón Multicapa con 7 sensores de entrada, 15 neuronas ocultas y una de salida
net=newff([minmax(pn))],[15 1],{'tansig’,’logsig’},’trainrp’);
% Tipos de aprendizaje: trainlm, trainbfg, trainrp, trainscg, traincbg, traincgf, traincgp, trainoss, traingdx
•
Especificación de los parámetros de aprendizaje de la red
net.trainParam.show=20;
%Se muestran los resultados cada 50 iteraciones (épocas)
net.trainParam.lr=0.1;
%Tasa de aprendizaje
net.trainParam.epochs=500;
%Número máximo de iteraciones
net.trainParam.goal=0.05;
%Tolerancia de error como criterio de parada
net.trainParam.min_grad=0.0000001; %Valor mínimo del gradiente para parar
• Entrenamiento de la red
net1=train(net,pn,T);
• Salidas de la red
Sn=sim(net1,pn);
• Evaluación del error con los datos del conjunto de entrenamiento
ErrorAbsMedio=mae(T-Sn);
ErrorMaximo=max(max(T-Sn));
• Presentación de los parámetros de la red
W1=net.IW{1};W2=net.LW{2};b1=net.b{1};b2=net.b{2};
% S=postmnmx(Sn,mint,maxt): para recuperar la salida si la hubiéramos
% normalizado
SOLUCIÓN:
________________________________________________________________________________
Se obtiene una red con siete sensores de entrada, 15 neuronas en la capa oculta y una neurona de salida.
Se ha utilizado la regla de aprendizaje de retropropagación flexible. Se clasifican incorrectamente 4
patrones incorrectamente (2%).
Fig. Evolución del error durante el entrenamiento
Fig. 18. Datos proyectados en R
2
________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
PRÁCTICA 4
PERCEPTRÓN MULTICAPA: Clasificación de tres tipos de vino
Se va a diseñar un Perceptrón con una capa oculta de neuronas y tres neuronas de salida con el fin de
diagnosticar la clase de vino según 13 características que presenta, utilizando 59 patrones de
entrenamiento de vinos de la clase A, 71 de la clase B, y 48 de la clase C.
• Carga de datos
load pima
• Preprocesado de los datos
[pn,minp,maxp,tn,mint,maxt]=premnmx(P,T); % Normaliza los datos en [-1,1]
%[pn,meanp,stop,tn,meant,stdt]=prestd(P,T); Para tipificar los datos de entrada
• Creación del Perceptrón Multicapa con 13 sensores de entrada, 2 neuronas ocultas y 3 de salida:
net=newff([minmax(pn)],[2 3],{'tansig’,’logsig’},’trainlm’);
% Tipos de aprendizaje: trainlm, trainbfg, trainrp, trainscg, traincbg, traincgf, traincgp, trainoss, traingdx
• Especificación de los parámetros de aprendizaje de la red
net.trainParam.show=20;
%Se muestran los resultados cada 50 iteraciones (épocas)
net.trainParam.lr=0.1;
%Tasa de aprendizaje
net.trainParam.epochs=300;
%Número máximo de iteraciones
net.trainParam.goal=0.001;
%Tolerancia de error como criterio de parada
net.trainParam.min_grad=0.00001; %Valor mínimo del gradiente para parar
• Entrenamiento de la red
net1=train(net,pn,T); % Utilizamos las mismas salidas T puesto que están normalizadas en el intervalo [0,1]
• Salidas de la red
Sn=sim(net1,pn);
• Evaluación del error con los datos del conjunto de entrenamiento
ErrorAbsMedio=mae(T-Sn);
ErrorMaximo=max(max(T-Sn));
• Presentación de los parámetros de la red y del error
W1=net.IW{1};W2=net.LW{2};b1=net.b{1};b2=net.b{2};
NúmClasifIncorrectas=sum(abs(round(Sn)-T));
SOLUCIÓN:
________________________________________________________________________________
Se obtiene una red con trece sensores de entrada, dos neuronas en la capa oculta y tres neurona de salida
(una para cada clase). Se ha utilizado la regla de aprendizaje de Levenverg-Marquardt y se han clasificado
correctamente los 178 patrones de entrenamiento.
Fig. 19. Evolución del error durante el entrenamiento
2
Fig. 20. Datos proyectados en R
________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
PRÁCTICA 5
PERCEPTRÓN MULTICAPA: Predicción de niveles de colesterol
Se va a diseñar un Perceptrón con una capa oculta de neuronas y tres neuronas de salida con el fin de
predecir los niveles de colesterol (ldl,hdl y vldl) según las medidas de 21 componentes espectrales.
• Carga de datos
load choles_all
• Preprocesado de los datos
[pn,minp,maxp,tn,mint,maxt]=premnmx(P,T); % Normaliza los datos en [-1,1]
%[pn,meanp,stop,tn,meant,stdt]=prestd(P,T); Para tipificar los datos de entrada
• Creación del Perceptrón Multicapa con 21 sensores de entrada, 15 neuronas ocultas y tres salida:
net=newff([minmax(pn)],[15 3],{'tansig’,’logsig’},’trainscg’);
• Especificación de los parámetros de aprendizaje de la red
net.trainParam.show=50;
%Se muestran los resultados cada 50 iteraciones (épocas)
net.trainParam.lr=0.1;
%Tasa de aprendizaje
net.trainParam.epochs=1000;
%Número máximo de iteraciones
net.trainParam.goal=0.027;
%Tolerancia de error como criterio de parada
net.trainParam.min_grad=0.0000001; %Valor mínimo del gradiente para parar
• Entrenamiento de la red
net1=train(net,pn,tn);
• Salidas de la red
Sn=sim(net1,pn);
• Evaluación del error con los datos del conjunto de entrenamiento
ErrorAbsMedio=mae(tn-Sn); ErrorMaximo=max(max(tn-Sn));
• Presentación de los parámetros de la red, el error y las salidas sin normalizar
W1=net.IW{1};W2=net.LW{2};b1=net.b{1};b2=net.b{2};
mae(S-t); tasaerror=sum( abs( (tn-Sn)’) )/264
• Presentación de las salidas sin normalizar
S=postmnmx(Sn,mint,maxt):
• Análisis post-entrenamiento
[m,a,r]= postreg(Sn(3,:),tn(3,:)); % m=pendiente; a=término indep.; r=coef. correlación lineal
SOLUCIÓN:
________________________________________________________________________________
Se obtiene una red con 21 sensores de entrada, 15 neuronas en la capa oculta y 3 neuronas de salida (una
para cada clase). Se ha utilizado los datos normalizados y la regla de aprendizaje del gradiente conjugado
escalado. Los errores absolutos medios obtenidos para las tres neuronas de salida son 0.0837, 0.0938 y
0.1712, respectivamente. El coeficiente r vale sólo 0.635 para la tercera neurona de salida por lo que parece
que no está bien modelada.
Fig. 21. Evolución del error durante el entrenamiento
Fig. 22. Regresión lineal de la 3ª salida
________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
PRÁCTICA 6
PERCEPTRÓN MULTICAPA: Entrenamiento muestral y validación
Se va a diseñar un Perceptrón con una capa oculta de neuronas y tres neuronas de salida con el fin de
predecir lo mejor posible los niveles de colesterol (ldl,hdl y vldl) según las medidas de 21 componentes
espectrales, y evaluar su capacidad de generalización. Para ello se realiza una reducción de las variables
de entrada (algunas altamente correlacionadas entre sí) mediante el análisis de componentes principales,
de manera que las nuevas variables expliquen el 99.9% de la variación de los datos. Con las cuatro
primeras componentes principales se consigue dicho objetivo. Los valores de dichas componentes
(variables) constituyen las entradas del perceptrón multicapa que vamos a diseñar. Para evitar un
superajuste de los datos se va a utilizar el método de la parada temprana, es decir, dejaremos de entrenar
a la red tan pronto como el error de validación comience a incrementarse.
• Carga de datos
load choles_all
• Tipificación de los datos
[pn,meanp,stdp,tn,meant,stdt]=prestd(p,t); % Los nuevos datos tienen media cero y varianza uno
• Obtención de las Componentes Principales (CP) para eliminar redundancia
[ptrans,transMat]=prepca(pn,0.001); % Generación de la CP con el 99.9% de la variación total
[F,C]=size(ptrans);
• Partición de los datos en tres subconjuntos: Entrenamiento (50%), Validación (25%) y Prueba (25%)
ie=[1:4:C;3:4:C]; % Índice datos entrenamiento
iv=4:4:C;
% Índice datos validación
ip=2:4:C;
% Índice datos prueba
ptr=ptrans(:,ie);ttr=tn(:,ie);
val.P=ptrans(:,iv);val.T=tn(:,iv);
test.P=ptrans(:,ip);test.T=tn(:,ip);
• Creación de un Perceptrón Multicapa con 4 sensores de entrada, 10 neuronas ocultas y 3 de salida:
net=newff([minmax(ptr)],[10 3],{'tansig’,’purelin’},’trainlm’);
% Tipos de aprendizaje: trainlm, trainbfg, trainrp, trainscg, traincbg, traincgf, traincgp, trainoss, traingdx
• Especificación de los parámetros de aprendizaje de la red
net.trainParam.show=50;
%Se muestran los resultados cada 50 iteraciones (épocas)
net.trainParam.lr=0.1;
%Tasa de aprendizaje
net.trainParam.epochs=1000;
%Número máximo de iteraciones
net.trainParam.goal=0.027;
%Tolerancia de error como criterio de parada
net.trainParam.min_grad=0.0000001; %Valor mínimo del gradiente para parar
• Entrenamiento de la red
[net,tr]=train(net,ptr,ttr,[],[],val,test);
• Trazado de los errores de entrenamiento, validación y prueba
plot(tr.epoch,tr.perf,tr.epoch,tr.vperf,tr.epoch,tr.tperf)
legend(‘Entrenamiento’,’Validación’,’Test’,-1);
ylabel(‘Error cuadratico’);xlabel(‘Epoca’)
• Análisis post-entrenamiento
Sn=sim(net,ptrans);
S=poststd(Sn,meant,stdt);
for i=1:3
figure(i)
[m(i),a(i),r(i)]= postreg(S(i,:),t(i,:));
% m=pendiente; a=término indep.; r=coef. correlación lineal
end
PRÁCTICAS DE LABORATORIO
SOLUCIÓN:
________________________________________________________________________________
Se obtiene un Perceptrón Multicapa con 4 sensores de entrada, 10 neuronas en la capa oculta y 3 neuronas
de salida (una para cada tipo de colesterol). Se han utilizado las 4 primeras componentes principales como
entradas, puesto que contienen el 99.9% de la variación de los datos, y la regla de aprendizaje de
Levenverg-Marquardt. El entrenamiento se ha parado después de 10 épocas puesto que el error cuadrático
para el conjunto de validación comenzaba a incrementarse (método de la parada temprana) y con ello se
trata de evitar un superajuste de la función.
Fig. 23. Evolución del error durante el entrenamiento
Con el análisis de la regresión lineal entre las respuestas (salidas) de la red y las salidas deseadas (metas)
se puede ver como las respuestas de las dos primeras neuronas de salida están altamente correlacionadas
con las salidas deseadas (r vale casi 0.9). Sin embargo, las respuestas de la tercera neurona de salida no
están altamente correlacionadas con las salidas deseadas, por lo que no están bien modelados los niveles
de colesterol vldl, bien porque se necesiten más neuronas en la capa oculta, porque se necesite utilizar otro
método diferente de parada, como los métodos de regularización, o porque no se pueden predecir bien
dichos niveles a partir de las variables de entrada.
Fig. 24. Regresión lineal de la 1ª salida
Fig. 25. Regresión lineal de la 2ª salida
Fig. 26. Regresión lineal de la 3ª salida
________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
PRÁCTICA 7
PERCEPTRÓN MULTICAPA : Aproximación de funciones
Diseña un Perceptrón Multicapa con la regla de aprendizaje de Levenrg-Marquardt que aproxime la función
y = x 2 + 3 x en el intervalo [−4, 4]. Analiza los resultados estudiando el error del ajuste.
•
Conjunto de patrones de entrenamiento: Generación de datos
P=-4:0.5:4;
•
T=x.^2+3*x;
Representación gráfica de los datos
plot(P,T,’o’);title(‘Parábola’);hold on
•
Creación de un Perceptrón Multicapa con 3 neuronas en la primera capa oculta y una neurona de
salida con la regla de aprendizaje de Levenberg-Marquardt.
net=newff( [-4 4],[3 1], {'tansig','purelin'},'trainlm');
•
Especificación de los parámetros de aprendizaje de la red
net.trainParam.show=10;
net.trainParam.lr=0.1;
net.trainParam.epochs=200;
net.trainParam.goal=0.0001;
net.trainParam.min_grad=0.00001;
•
%Se muestran los resultados cada 50 iteraciones (épocas)
%Tasa de aprendizaje
%Número máximo de iteraciones
%Tolerancia de error como criterio de parada
%Valor mínimo del gradiente para parar
Entrenamiento de la red
net1=train(net,P,T);
•
Salidas de la red
S=sim(net1,P);
•
Representaciones gráficas
plot(P,T);hold on;plot(P,s,’+g’);hold on
error=abs(T-S);plot(P,error);hold off
ErrorMaximo=max(max(T1-S))
•
Capacidad de generalización de la red
P1=-4:0.01:4; T1=P1.^2+3*P1; S1=sim(net1,P1);
plot(P1,S1);hold on; plot(P,T)
SOLUCIÓN:
_____________________________________________________________________________________
Se ha obtenido una red con un sensor de entrada, tres neuronas en la capa oculta y una neurona de salida.
Se ha utilizado la regla de aprendizaje de de Levenberg-Marquardt obteniéndose un error absoluto medio de
generalización igual a 0.009.
Fig. 27. Evolución del error
Fig. 28 . Salidas de la red
_____________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
PRÁCTICA 8
PERCEPTRÓN MULTICAPA: Aproximación de funciones
Se va a aproximar la función humps de Matlab en el intervalo [0,2] mediante un Perceptrón Multicapa.
•
Conjunto de patrones de entrenamiento
P=0:0.05:2;
•
T=humps(P); % la función es y =
1
1
+
−6
2
( x − 3) + 0.01 (( x − 9) 2 + 0.04
Creación del Perceptrón Multicapa con una cada oculta de 9 neuronas y una neurona en la capa de
salida
net=newff( [0 2],[9 1], {'tansig','purelin'},'trainlm');
% Tipos de aprendizaje: trainlm, trainbfg, trainrp, trainscg, traincbg, traincgf, traincgp, trainoss, traingdx
•
Especificación de los parámetros de aprendizaje de la red
net.trainParam.show=10;
net.trainParam.lr=0.01;
net.trainParam.epochs=200;
net.trainParam.goal=0.0001;
net.trainParam.min_grad=0.00001;
•
%Se muestran los resultados cada 50 iteraciones (épocas)
%Tasa de aprendizaje
%Número máximo de iteraciones
%Tolerancia de error como criterio de parada
%Valor mínimo del gradiente para parar
Entrenamiento de la red
net1=train(net,P,T);
•
Salidas de la red y comparación con las salidas deseadas
S=sim(net1,P);
error=abs(T-S);
•
Evaluación de la red con datos no usados en el entrenamiento
%Representación gráfica
plot(P,S,'+g',P,T,P,error); hold off
ErrorMaximo=max(max(T-S))
%Capacidad de generalización
P1=0:0.01:2; T1=P1.^2+3*P1;
S1=sim(net1,P1);
error=mae(T1-S1);
plot(P1,S1,P,T)
SOLUCIÓN:
______________________________________________________________________________________
Se ha obtenido una red con un sensor de entrada, nueve neuronas en la capa oculta y una neurona de
salida. Se ha utilizado la regla de aprendizaje de de Levenberg-Marquardt obteniéndose un error absoluto
máximo en el entrenamiento de 0.31 y un error medio de generalización igual a 0.09.
Fig. 29. Evolución del error
Fig. 30.Representación con datos P y T Fig. 31. Representación con datos P1 y T1
______________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
PRÁCTICA 9
PERCEPTRÓN MULTICAPA: Aproximación de funciones
Se va a diseñar un Perceptrón Multicapa con la regla de aprendizaje de Levenberg-Marquardt que aproxima
la función z = cos( x) cos( y ) en el cuadrado [−2, 2]× [−2, 2]. Analiza los resultados estudiando el error del
ajuste.
•
Conjunto de patrones de entrenamiento: Generación de datos
x=-2:0.25:2; y=-2:0.25:2; z=cos(x)’*sin(y);
P=[x;y]; T=z;
•
Representación gráfica de los datos
mesh(x,y,z)
•
Creación de un Perceptrón Multicapa con 25 neuronas en la primera capa oculta y 17 en la
segunda con la regla de aprendizaje de Levenrg-Marquardt.
net=newff( [-2 2;-2 2],[25 17],{‘tansig’,’purelin’},’traingd’);
•
Especificación de los parámetros de aprendizaje de la red
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.epochs=300;
net.trainParam.goal=0.00001;
net.trainParam.min_grad=0.00001;
•
%Se muestran los resultados cada 50 iteraciones (épocas)
%Tasa de aprendizaje
%Número máximo de iteraciones
%Tolerancia de error como criterio de parada
%Valor mínimo del gradiente para parar
Entrenamiento de la red
net1=train(net,P,T);
gi=input(‘Pulse cualquier tecla …’);
•
Salidas de la red y representación gráfica con respecto a las entradas
S=sim(net1,P);
subplot(1,2,1); mesh(x,y,T);
subplot(1,2,2); mesh(x,y,S)
•
Evaluación del error con los datos del conjunto de entrenamiento
mesh(x,y,S-T)
xlabel('eje X');ylabel('eje Y');zlabel('Error')
title('Superficie de error')
SOLUCIÓN:
______________________________________________________________________________________
Se ha obtenido una red con dos sensores de entrada, 25 neuronas en la capa oculta y
diecisiete neuronas en la capa de salida. Se ha utilizado la regla de aprendizaje de de Levenberg-Marquardt
obteniéndose un error absoluto máximo en el entrenamiento igual a 0.009.
Fig. 32. Representación gráfica de z
Fig. 33. Evolución del error
Fig. 34. Superficie de error
_____________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
Redes neuronales con Funciones de Base Radial
17-05-2007
________________________________________________________________________
PRÁCTICA 1
Ajuste de funciones
Diseña un Red Neuronal con Funciones de Base Radial que aproxime la función y = x 2 + 3 x en el intervalo
[−4, 4]. Analiza los resultados estudiando el error del ajuste.
•
Conjunto de patrones de entrenamiento: Generación de datos
x=-4:0.1:4;
P=x; T=y;
•
y=x.^2+3*x;
Representación gráfica de los datos
plot(P,T,’o’)
grid,xlabel(‘eje X’);ylabel(‘eje Y’)
title(‘Parábola’);
•
Creación de una red neuronal con Funciones de Base Radial.
net1=newrb(P,T,0.01);
•
Salidas de la red y representación gráfica del error
a=sim(net1,P);
plot(P,a-T,P,T)
•
Evaluación del error con otro conjunto de datos
x1=-4:0.01:4;
y1=x.^2+3*x;
P1=x1;T1=y1 ;
a1=sim(net1,P1);
plot(P,a1-T1,P1,T1)
PRÁCTICAS DE LABORATORIO
PRÁCTICA 2
Ajuste de funciones
Ajusta la función humps de Matlab en el intervalo [0,2] mediante un Red con Funciones de Base Radial.
• Función de Base Radial
•
p=-3:0.01:3;
a=radbas(p);
plot(p,a)
•
Conjunto de patrones de entrenamiento
x=0:0.05:2; y=humps(x);
P=x; T=y;
plot(P,T,’x’)
grid; xlabel(‘Tiempo(s)’);ylabel(‘salida’);title(‘función humps’)
•
Creación de una red neuronal con funciones de base radial de la forma más simple
net1=newrb(P,T);
•
Salidas de la red y representación gráficas de los errores
a=sim(net1,P);
plot(P,T-a,P,T)
•
Evaluación de la red con datos no usados en el entrenamiento
x1=0:0.01:2; P1=x1; y1=humps(x1);T1=y1;
a1=sim(net1,P1);
plot(P1,a1,P1,T1,P,T)
•
Comentario: la aproximación no es buena. Los valores por defecto de los dos parámetros de la red
no son adecuados (objetivo del error = 0.0 y spread = 1.0)
•
Elección de parámetros
goal=0.02; spread=0.1;
net1=newrb(P,T,goal,spread);
•
Salidas de la red y representación gráfica de los errores
a=sim(net1,P);
plot(P,T-a,P,T)
xlabet(‘Tiempo(s)’) ;ylabel(‘Salidas de la red y errores’)
title(‘Aproximación de la Función Humps por Redes RBF)
PRÁCTICAS DE LABORATORIO
Redes Neuronales Autoorganizadas
31-05-2007
________________________________________________________________________
PRÁCTICA 1
Redes neuronales competitivas no supervisadas: Formación de grupos
Se va a diseñar una red neuronal competitiva para agrupar 38 virus en 4 clases de acuerdo al parecido que
según 18 características de los mismos, de manera que los patrones dentro de cada clase sean lo más
similares posible entre sí y se va a determinar el patrón prototipo de cada clase.
• Carga de datos
load virus
•
Creación de una red neuronal competitiva
net=newc([minmax(p)],4);
• Entrenamiento de la red
net.trainParam.epochs = 500 ;
net = train(net,p);
• Simulación de las salidas de las red
S=sim(net,p); % asigna cada patrón de entrada a su grupo
c=vec2ind(S); % vector de las neuronas activadas para cada patrón
• Pesos sinápticos de la red:
w=net.IW{1}
b=net.b{1}
SOLUCIÓN:
______________________________________________________________________________________
La red está constituida por 18 sensores de entrada y 4 neuronas de salida. Después del proceso de
entrenamiento no supervisado, basado en las 18 características de los 38 virus utilizados, se obtiene como
salida de la red para cada virus el grupo al que este pertenece, que viene especificado por la neurona de
salida que se ha activado. Las neuronas de salida activadas para cada uno de los 38 virus ha sido,
respectivamente,
4
4
2
4
3
3
3
3
1
3
1
3
2
1
4
1
2
1
2
1
4
1
4
1
2
1
3
3
3
3
3
3
2
2
3
2
2
4
Fig. 35. Representación de los datos de virus en sus dos primeras componentes principales
______________________________________________________________________________________
ver democ1
PRÁCTICAS DE LABORATORIO
PRÁCTICA 2
Redes neuronales Autoorganizadas: Representación espacial de datos
Los datos IRIS constan de 4 características de hojas de lirios (ancho y largo de sus pétalos y sépalos)
correspondientes a tres variedades de lirios: virginia, setosa y versicolor. Corresponden a 50 hojas de cada
variedad. Se va a diseñar una red autoorganizada que permita asociar cada hoja a una neurona (punto)
colocada sobre una cuadrícula de manera que las hojas más parecidas estén representadas por neuronas
próximas en la rejilla.
• Carga de datos
load iris
• Creación de una red autoorganizada
net = newsom([minmax(p)],[4 4],'gridtop','dist',0.9,200,0.1,1);
% crea una SOM sobre una cuadrícula [4×4] con forma 'griptop', ‘hextop’ o
%‘randtop’; distancia ('dist', 'linkdist','mandist'); tasa de aprendizaje
% en la fase de ordenación; Nº de épocas fase de ordenación; tasa de
% aprendizaje fase de ajuste; distancia de vecindad fase de ajuste
• Entrenamiento de la red
% net.trainParam.epochs = 400 ; % net.trainParam.order_steps = 200 ;
% net.trainParam.show = 50 ;
% net.trainParam.tune_nd=1;
% Distancia de vecindad en la fase de ajuste
% net.trainParam.order_lr=0.9;
% Tasa de aprendizaje en la fase de ordenación
% net.trainParam.tune_lr=0.1;
% Tasa de aprendizaje en la fase de ajuste
net = train(net,p);
• Pesos y Gráfico de la red entrenada
w = net.iw{1,1}; d = net.layers{1}.distances; % w= pesos y d = distancias entre neuronas
plotsom(w,d)
• Simulación de las salidas de las red
S=sim(net,p); % asigna cada patrón de entrada a una neurona
c=vec2ind(S); % vector de las neuronas activadas para cada patrón
SOLUCIÓN:
______________________________________________________________________________________
Se utiliza una cuadrícula 3×2 como espacio neuronal. Así, la red autoorganizada está constituida por 6
neuronas de salida y 4 sensores de entrada. Después del proceso de entrenamiento no supervisado se
obtienen los pesos sinápticos de la red. Las 50 primeras hojas (virginia) las asigna a la neurona 5; las 50
siguientes (setosa) las asigna mayoritariamente (26) a la neurona 4 (13 a la 2 y 11 a la 3). Las 50 últimas
hojas (versicolor) las asigna mayoritariamente (35) a la neurona 1 (14 a la 2 y sólo 1 a la 4). Así, las
neuronas 3 y 4 recogen 37 hojas de de la variedad setosa. La neurona 2 recoge 13 hojas de la variedad
setosa y 14 de la variedad versicolor (zona de solapamiento). A continuación se muestran los resultados
gráficos para una cuadrícula 3×2 y 4×4:
○5 A
○ 3B
○1C
○6
○4B
○ 2 BC
○13C
○14 B
○15 A
○15 A
○ 9C
○ 5C
○10C
○ 6 BC
○11
○7B
○12 A
○8
○1C
○ 2B
○3B
○ 4B
Fig. 36. Topología del espacio neuronal y representación gráfica de las neuronas según sus pesos
______________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
PRÁCTICA 3
Redes neuronales Autoorganizadas: Representación de datos sobre curvas
Se van a proyectar puntos aleatorios del plano sobre una curva de manera que se conserve, dentro de lo
posible, la topología espacial. Es decir, que puntos próximos en el espacio tengan también próximas sus
proyecciones.
• Carga de datos
x=rand(1,20);
y=rand(1,20);
plot(x,y,'ok')
• Creación de una red autoorganizada
net = newsom([minmax(p)],[4 4],'hextop','dist',0.9,200,0.1,1);
% crea una SOM sobre una cuadrícula [4×4] con forma 'griptop', ‘hextop’ o
%‘randtop’; distancia ('dist', 'linkdist','mandist'); tasa de aprendizaje
% en la fase de ordenación; Nº de épocas fase de ordenación; tasa de
% aprendizaje fase de ajuste; distancia de vecindad fase de ajuste
• Entrenamiento de la red
% net.trainParam.epochs = 400 ; % net.trainParam.order_steps = 200 ;
% net.trainParam.show = 50 ;
% net.trainParam.tune_nd=1;
% Distancia de vecindad en la fase de ajuste
% net.trainParam.order_lr=0.9;
% Tasa de aprendizaje en la fase de ordenación
% net.trainParam.tune_lr=0.1;
% Tasa de aprendizaje en la fase de ajuste
net = train(net,p);
• Pesos y Gráfico de la red entrenada
w = net.iw{1,1}; d = net.layers{1}.distances; % w= pesos y d = distancias entre neuronas
plotsom(w,d)
• Simulación de las salidas de las red
S=sim(net,p); % asigna cada patrón de entrada a una neurona
c=vec2ind(S); % vector de las neuronas activadas para cada patrón
SOLUCIÓN:
______________________________________________________________________________________
Se ha utilizado una rejilla lineal 1×20 como espacio neuronal. Así, la red autoorganizada está constituida por
20 neuronas de salida y 2 sensores de entrada. Después del proceso de entrenamiento no supervisado se
obtienen los pesos sinápticos de la red que se representan por puntos rojos en la gráfica siguiente. Los
puntos aleatorios (patrones) se representan por el símbolo ‘×’. La forma que adopta la curva generada por
las neuronas nos da idea de cómo ha quedadon colocados los puntos aleatorios sobre el cuadrado unidad.
Cada punto generado (patrón) es asignado (proyectado) por la red a la neurona más próxima. Con la curva
generada se intenta conservar la topología de los puntos en R2.
Fig. 37. Representación gráfica de las neuronas según sus pesos sinápticos
______________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
PRÁCTICA 4
Redes neuronales competitivas no supervisadas: Clasificación
Se va construir una red neuronal competitiva con aprendizaje supervisado para predecir si una persona es
diabética a partir de 7 características personales (datos Pima).
• Carga de datos
load pima % Pasamos las salidas deseadas de 1 y 0
for i=1:200
if T(i)==0,
T(i)=2;
end
end
a 1 y 2;
T=ind2vec(T); % Transformamos los índices en vecotres
% salidas = full(T); %para ver los vectores en forma normal
• Creación de una red red competitiva con aprendizaje supervisado (LVQ)
net=newlvq([minmax(P)],60,[.34 .66],0.1,'learnlv1'); %Neuronas ocultas,
% poercentaje de neuronas ocultas asignadas 1ª clase;
net.IW{1,1}
• Entrenamiento de la red
net.trainParam.epochs = 300
net = train(net,P,T);
• Simulación de las salidas de las red y evaluación del error
S=sim(net,P);
Sc=vec2ind(S); %Transforma los vectores en índices
Tc=vec2ind(T);
error=sum(abs(Tc-Sc)) % Nº de clasificaciones incorrectas
SOLUCIÓN:
______________________________________________________________________________________
La red está constituida por 7 sensores de entrada, una capa oculta con 60 neuronas y dos neuronas de salida.
Después del proceso de entrenamiento de la red con 200 patrones (68 con diabetes y 132 sin diabetes), la red
clasifica incorrectamente a 15 de las no diabéticas y a 16 de las diabéticas.
Fig. 38. Representación gráfica de la evolución del error
______________________________________________________________________________________
PRÁCTICAS DE LABORATORIO
Redes Neuronales Recurrentes y Dinámicas: Red de Elman
31-05-2007
________________________________________________________________________
PRÁCTICA 1
Red de Elman: Predicción en el tiempo
Se va a diseñar una red neuronal de Elman que encuentra las respuestas correctas a una secuencia de 20
patrones que son cero o uno (binarios). La salida deseada es binaria y vale cero, excepto cuando la
entrada actual y la anterior son iguales a 1.
• Generación de datos
P = round(rand(1,20));
T = [0 (P(1:end-1)+P(2:end) == 2)];
• Conversión de los datos a un array celular
Pseq = con2seq(P);
Tseq = con2seq(T);
• Creación de la red de Elman
net=newelm([minmax(P)],[2 1],{'tansig','purelin'},'traingdx','learngdm','mae');
• Entrenamiento de la red
net.trainParam.epochs = 200;
net = train(net,Pseq,Tseq);
• Simulación de la red y evaluación del error
S=sim(net,Pseq);
Sq=seq2con(S);
% Convierte S a secuencia numérica
Y=Sq{1,1};
dife=T-Y
SOLUCIÓN:
______________________________________________________________________________________
Los patrones de entrenamiento son:
P =[ 0
T =[ 0
0
0
1
0
1
1
1
1
1
1
0
0
1
0
1
1
1
1
0
0
1
0
0
0
0
0
0
0
1
0
1
1
0
0
1
0
1 ]
1 ]
La red está constituida por un sensor de entrada, una capa oculta con 2 neuronas y una neurona de salida.
Después del proceso de entrenamiento de la red los errores de predicción en los 20 patrones son:
[ -0.0335
-0.0206 -0.5046 0.2065 0.1783 0.1833 -0.0486 -0.1675
-4
-0.0117 -0.1684 0.2083 -0.0572 -0.1675 0.2083 ] ×10
0.2083
0.1781 -0.0478 -0.1675 -0.0284 -0.1302
Fig. 39. Representación gráfica de la evolución del error
______________________________________________________________________________________
Descargar