Modelos, Control y Sistema de Visión

Central     Modelos     Control     Visión     Aplicaciones     Publicaciones     Mapa     Buzón     Sobre el autor      

Modelo basado en una red multicapas

 

Ejemplo: Obtener el modelo que permita predecir la contaminación ambiental Benchmark [3].           

 

Paso 1: Ordenar la matriz de entrada-salida

 

%Se cargan los datos al espacio de trabajo:

>> load -ascii no2.txt

%No se utilizan los primeros 10 datos

>> no2=no2(11:500,:);

%Se define la matriz de entrada:

>> x=no2(:,2:8)';

%Se define la matriz de salida:

>> y=no2(:,1)';

%La cual se normaliza,  #### Esto puede que no sea necesario ####

>>[y_norm,parm_norm] = mapminmax(y); 

 

Paso 2: Crear la red multicapa

%El segundo paso para crear una red multicapa que se adapte usando la retropropagación del error es %definiendo las características de la red, para lo cual se utiliza la función "newff". Se definen a

%continuación los elementos que serán argumentos de esta función:

 

%Valores mínimos y máximos de las variables de entrada:

>> interv=minmax(x)
interv =
4.1271    8.3485
-18.600  21.1000
0.3000    9.9000
-5.4000   4.3000
2.0000    359.0000
1.0000    24.0000
32.0000  608.0000

% Número de neuronas para cada capa:

% Se utilizarán cuatro capas:

% Capa 1: 25 neuronas, Capa 2: 17 neuronas, Capa 3: 8 neuronas y Capa 4: 1 neurona(definido por el % sistema)

>>num_capas=[25 17 8 1];

% Se definen las funciones de activación que se utilizarán en cada capa

>>funcact={'tansig' 'tansig' 'tansig' 'tansig'};

% Se aplicará el entrenamiento basado en Levenberg-Marquard , con factor de aprendizaje variable

>> net=newff(interv, num_capas, funcact, 'trainlm', 'learngdm', 'mse');

 

%######################################################

% Si se utiliza la nueva versión de la función newff no es necesario definir los intervalos de las variables % ni el número de neuronas de la capa de salida:

>>num_capas=[25 17 8];

>>net=newff(x,y, num_capas, funcact, 'trainlm', 'learngdm', 'mse');

%######################################################

 

% Se verifican los parámetros de entrenamiento que tiene definida la red:

>> net.trainParam
ans =
epochs: 100         % Número de épocas
goal: 0                % Objetivo de la función de validación
max_fail: 5
mem_reduc: 1
min_grad: 1.0000e-010
mu: 1.0000e-003
mu_dec: 0.1000
mu_inc: 10
mu_max: 1.0000e+010
show: 25
time: Inf 

 

% Se alteran los parámetros que se consideren (ver 'trainlm')

>>net.trainParam.epochs = 300; 

 

% Se entrena la rednet

>> train(net,x,y_norm); 

 

% Se aplica la entrada a la red:

>> ynet_norm=sim(net,x)';

 

% Se desnormaliza la salida de la red:  #### Esto puede que no sea necesario####

>> ynet = mapminmax('reverse',ynet_norm,parm_norm);

 

% Se comparan la salida real y la estimada por la red:

>> plot(y)
>> hold on
>> plot(ynet,'g');

 

% Se verifican los parámetros de la red:

%Ganancias (dimensión de matriz y valores):

>> size(net.b{1})  %Capa 1
ans = 25 1

>> net.b{1}
ans =
-3.2854
-7.5365
-3.1804
-5.9047
-5.6352
-4.5587
-4.4138
4.3410
2.8817
0.5614
0.5172
2.3010
-1.1179
-1.8063
-3.7357
-2.5344
0.8172
-4.4757
0.7029
-1.9958
0.4948
1.0523
-1.3205
-0.6093
-0.5755

 

>> size(net.b{2})    %Capa 2
ans = 17 1

>> net.b{2}
ans =
-1.4751
-1.3305
1.3949
1.3558
1.1793
0.4787
0.4028
-0.2043
0.0140
-0.2211
-0.2812
-0.2948
-0.6002
-0.9626
-1.2465
1.2596
1.5345

 

>> size(net.b{3})  %Capa 3
ans = 8 1

>> net.b{3}
ans =
-1.7740
-0.9910
0.4408
0.0676
-0.1429
-0.6571
-1.2616
1.3620

 

>> size(net.b{4})
ans = 1 1

>> net.b{4}
ans = 0.3961       %Capa 4

 

%Parámetros de las capas (dimensión de matriz y valores):

>> size(net.IW{1})   %Capa 1 (entrada)
ans = 25 7

>> net.IW{1}
ans =
0.2077 0.0428 -0.4742 0.5357 -0.0022 0.1016 0.0021
0.1814 -0.1233 0.7773 -0.5884 -0.0179 0.2984 0.0015
0.1239 0.0828 0.4311 -0.2365 0.0699 -0.2357 -0.0149
0.0190 0.0404 0.3075 -0.3696 0.0205 0.0827 0.0080
0.9274 -0.0554 -0.0350 0.0600 -0.0022 -0.0479 0.0018
0.4874 0.0330 -0.0423 -0.5963 -0.0032 0.1512 -0.0003
-0.0998 -0.0442 0.0657 -0.0659 -0.0085 0.1512 0.0101
0.0578 -0.1342 -0.4883 0.2447 -0.0133 -0.1579 0.0080
-0.5862 0.1288 -0.0119 0.5149 -0.0085 0.1787 0.0005
-0.6396 0.2002 0.2789 -0.2331 0.0100 -0.0863 -0.0013
0.6227 -0.1868 0.4241 -0.1210 -0.0135 -0.3997 0.0109
-0.8742 0.0400 0.0659 0.0840 -0.0020 0.2172 0.0003
0.7510 -0.0484 -0.9635 -0.1381 -0.0032 0.1489 -0.0058
0.3163 -0.4007 0.1002 0.1719 0.0079 -0.2452 0.0080
-0.3245 0.1167 -0.2289 -0.4114 0.0230 0.1713 0.0017
0.3104 -0.5187 0.8294 0.1486 -0.0013 -0.0893 -0.0067
0.3683 0.6695 0.1631 0.0904 -0.1030 0.1703 0.0084
-0.3876 0.0021 0.2723 0.4069 0.0183 0.1845 0.0011
0.2913 0.3294 0.6457 0.2860 -0.0172 -0.2386 -0.0125
1.0290 0.6050 0.5799 0.1540 -0.0216 0.0417 0.0023
-0.1118 -0.7267 -0.5488 -0.5540 -0.0190 -0.0543 0.0027
-0.3157 -0.2189 -0.6650 0.8676 -0.0803 0.5026 0.0076
-0.9977 0.0084 0.7826 0.1590 -0.0231 0.3306 0.0260
0.3920 -0.1228 0.1297 0.2052 -0.1301 0.0762 0.1254
0.2983 -0.0865 0.0098 -0.9661 -0.0071 -0.1524 0.0029

 

>> size(net.LW{2,1})       %Capa 2
ans = 17 25

>> net.LW{2,1}
ans = Columns 1 through 12
0.5386 0.4638 0.5650 -0.2281 -0.1210 0.5009 -0.9644 -0.2718 0.6635 1.2305 1.0352 -0.9062
0.1703 -0.0633 0.2883 0.6359 -0.0599 0.0172 -0.5962 -0.0214 0.2636 0.2214 -0.1326 -0.2594
0.4007 0.0418 -0.4309 0.0185 -0.3066 -0.0860 0.2532 -0.3476 0.6512 -0.2455 0.7465 -0.2297
0.2970 0.8620 0.7167 0.6797 -0.0907 -0.9354 -0.3857 -0.4387 0.3110 0.0774 -0.1360 0.3875
-0.7397 0.6012 0.0414 -0.1515 0.1103 -0.5930 -0.1472 -0.3196 -0.0187 -0.5356 0.5172 -0.2367
0.3767 0.7186 0.3162 1.0988 -0.0687 -0.3401 0.5258 -0.0532 -0.4789 -0.1185 -0.1493 -0.3873
-0.4050 0.7060 -0.2154 0.6577 0.3150 -0.7911 0.3329 0.2614 -0.4749 0.3344 -0.1308 0.1950
-0.1386 -0.6095 -0.0489 -0.0620 0.1047 0.2324 -0.5266 0.8548 -1.0371 0.2880 -0.4036 -0.1824
0.1096 0.0464 0.9812 -0.3216 0.0980 -0.1650 0.0883 -0.8862 -0.6011 -0.2007 -0.6161 -0.2024
-0.3740 -0.2952 -0.4991 -0.6782 -0.0678 0.3979 0.4938 -0.1015 -0.6843 -0.0128 -0.4449 -0.5928
-0.2583 -0.7878 0.1432 0.0780 -0.5616 -0.3752 -0.8152 -0.9133 0.5019 0.2117 0.1545 -0.5626
-0.6850 -1.0365 -0.3393 -0.5689 -0.6992 -0.0890 0.2734 0.5629 0.6757 -0.1848 0.2200 -0.0951
-0.6728 0.4510 0.1527 -0.4304 0.6092 -0.0698 0.7560 0.3313 -0.4146 -0.3637 0.2593 0.3613
-0.2849 -0.9599 0.1349 0.7710 0.5472 0.3965 0.4858 -0.1282 -0.4408 -0.6471 -0.6181 0.7805
-0.2004 -0.7377 -0.1549 0.2970 -0.2448 -0.1723 0.4395 0.4851 0.7429 -0.2742 -0.0182 -1.0239
0.3526 0.2000 -0.5348 0.3161 0.2384 0.1371 0.2929 -1.1978 0.1885 -0.1968 0.6426 -0.5413
0.6704 0.0679 -0.1595 -0.5681 -0.7880 -0.7369 -0.0186 -0.1435 0.2955 0.0128 0.3992 -1.0382
Columns 13 through 24
0.0526 0.0171 0.2194 0.5967 0.3855 -0.4821 -0.2195 -1.0580 0.3801 0.1373 -0.1076 -0.5543
-0.5455 -0.1053 -0.0693 0.5693 -0.2492 0.5595 -0.1564 0.0382 0.0014 0.4929 0.5840 -0.1189
0.4580 0.3862 0.1511 0.5953 0.1437 -0.0609 -0.8492 0.3183 0.2132 0.0060 0.4392 -0.1063
-0.6430 0.8258 0.6083 -0.5925 0.0292 0.3343 0.5084 0.6023 -0.3057 0.1729 -0.0532 0.8118
-0.5864 -0.0689 -0.3331 -0.2307 0.3161 -0.5292 -0.3366 0.2004 -0.4556 0.3833 -0.5991 0.1445
0.4969 0.0376 -0.0171 0.1900 -0.0465 0.0965 0.6234 -0.6987 0.6197 -0.1916 0.6651 0.3830
0.6377 -0.5929 -0.0925 -0.1973 -0.0463 -0.0445 -0.4012 1.0979 -0.2521 0.0998 -0.9916 0.7715
-0.2980 -0.5176 -0.2730 -0.3487 0.0519 -0.7659 -1.0279 0.5662 0.6148 0.2387 -0.3885 -0.0230
-0.3112 0.6031 -0.3177 0.5602 0.6618 -0.9273 -0.2991 -0.4395 0.6036 -0.8316 -0.0513 -0.7013
-0.4398 0.3847 0.0022 0.2020 0.0690 0.8003 0.3249 -0.0068 -0.0594 0.1729 0.3797 0.8499
-1.0644 0.8943 -0.2961 0.0905 -0.7571 -0.0772 1.0081 0.9841 -0.6576 0.1708 -0.3599 0.0955
-0.1534 0.8560 0.2805 0.2924 0.4792 -0.3456 -0.5468 0.2001 -0.2838 0.1371 0.2001 -0.7425
0.3917 -0.2568 -0.1736 -0.9404 0.0357 0.1319 -0.0306 -0.1633 -0.2724 -0.1387 0.7468 0.6310
0.4125 0.8609 0.0675 -0.1348 0.1588 -0.3945 0.4621 -0.0235 -0.6094 0.6803 0.0598 0.5908
-0.3589 0.0171 0.6078 0.1921 0.8105 -0.2001 -0.3847 0.1963 0.4159 0.6866 0.4174 -0.2690
0.2387 -0.0456 0.5981 -0.3224 -0.6698 -0.0793 -0.2999 -0.1631 0.4001 0.3847 0.2333 -0.3368
-0.1320 0.2510 -0.2160 0.6073 0.7953 0.2398 -0.8856 -0.4612 -0.0612 -0.1418 0.4536 0.0506
Column 25
0.2160
-0.3776
-0.0870
0.0699
0.5661
-0.4884
0.1880
0.3515
-0.0654
0.0241
0.3567
0.4592
0.4611
-0.1901
-0.2291
-0.2236
0.3208

 

>> size(net.LW{3,2})    % Capa 3
ans = 8 17

>> net.LW{3,2}
ans = Columns 1 through 12
1.0739 0.1831 -0.4747 -0.6744 0.1714 -0.4431 -0.3326 0.4103 -0.2484 0.2264 -0.0546 0.0461
0.3529 -0.3604 0.2458 -0.8389 0.4373 -0.0858 0.3960 0.2750 0.3791 -0.2176 -0.9138 0.2126
-0.5562 -0.3539 0.3987 0.0060 0.4534 -0.5643 1.0802 0.3291 0.2547 -0.1013 -0.0498 -0.5186
0.4796 -0.3389 -0.1008 -0.2679 0.6543 1.3453 1.0822 -0.0389 -0.6277 0.4363 0.4825 -0.4749
0.2961 -0.0313 0.0427 -0.5860 0.6939 -0.4541 0.0312 -0.5677 -0.0411 -0.1947 0.3026 0.4362
-0.2573 0.3326 0.3457 -0.1188 -0.0215 -0.1995 -0.3946 0.6032 -0.1580 -0.2362 0.3980 -1.2462
-1.1948 0.1987 -0.7847 -0.7945 -0.0334 0.2235 0.5785 -0.0544 -1.1086 -0.1156 -0.0868 0.1483
0.5408 -0.2948 -0.6942 -0.4675 0.0901 0.1286 0.5293 0.9621 -0.0583 0.2743 -0.0534 -1.0846
Columns 13 through 17
0.0113 -0.5779 -0.5110 0.3011 0.3691
-0.0158 -0.7715 0.9018 1.0854 -0.8600
-0.2549 -0.9865 -0.3218 0.0439 -0.4402
-0.5201 -0.9777 0.0257 0.1104 -0.1938
-0.2620 0.5144 -0.3797 -0.4264 -0.5791
0.8783 0.1967 0.0736 -1.4337 1.0648
-0.4987 -0.2765 -1.3095 -0.4744 0.3549
-0.4780 0.5428 0.3121 0.1900 0.2305

 

>> size(net.LW{4,3})    % Capa 4
ans = 1 8

>> net.LW{4,3}
ans = 1.4415 0.4655 1.2421 1.5083 0.7452 1.4087 -1.0477 -0.8854

  

 

% Se aplica otro método de entrenamiento, para comparar

% Se aplicará el entrenamiento basado en gradiente descendente, con factor de aprendizaje variable

>> net=newff(interv, num_capas, funcact, 'traingdm', 'learngdm', 'mse');

 

% Se verifican los parámetros de entrenamiento que tiene definida la red:

>> net.trainParam
ans =
epochs: 100           % Número de épocas
goal: 0                  % Objetivo de la función de validación
lr: 0.0100              % factor de aprendizaje
max_fail: 5            
mc: 0.9000            % Intervalo del momento
min_grad: 1.0000e-010
show: 25
time: Inf

 

% Se alteran los parámetros que se consideren (ver 'traingdm')

>>net.trainParam.epochs = 300;  

 

% Se entrena, se evalúa la red y se compara la salida real y estimada y los parámetros de la red de

% forma similar al entrenamiento utilizando Levenberg-Marquard

 

Entrenamiento utilizando Levenberg-Marquard

 

        

      

Entrenamiento utilizando gradiente descendente

con momento