Extracción de variables pattern recognition en cada epoch
Publicado por David (2 intervenciones) el 16/11/2018 22:36:08
Estoy realizanado un proyecto con redes neuronales en el que utilizo el tool de matlab PatternRecognition.
Me interesaría saber la forma de extraer el valor de la salida de la red en cada iteración (epoch) para así poder calcular la precisión del sistema comparándola con mi target, y así poder graficarlo y estudiar la evolución del mismo.
Adjunto el bloque de código:
Me interesaría saber la forma de extraer el valor de la salida de la red en cada iteración (epoch) para así poder calcular la precisión del sistema comparándola con mi target, y así poder graficarlo y estudiar la evolución del mismo.
Adjunto el bloque de código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
%% Definición de entrada y salida esperada
X_dia = xlsread('X_dia'); %Datos de entrada
Y_esperada = xlsread('Salida_esperada'); %Datos de salida
yb = zeros(144,3);
for i=1:144
yb(i,Y_esperada(i)) = 1; %Datos objetivo o deseados
end
global variableGlobal;
variableGlobal = 1;
%% Entrenamiento de la función
x = X_dia';
t = yb';
trainFcn = 'trainlm'; % Levenberg-Marquardt backpropagation.
hiddenLayerSize = 10;
net = patternnet(hiddenLayerSize, trainFcn);
net.input.processFcns = {'removeconstantrows','mapminmax'};
% División de los datos en Training, Validation, Testing. En nuestro caso
% no llevamos a cabo tal división pues nos interesa estudiar el
% rendimiento del sistema, observando el número de epoch necesarias para
% que el sistema tenga error nulo, es decir, la diferencia entre la salida
% esperada y la obtenida sea nula.
%
% Para una lista de todos los tipos de funciones de división de datos: help nndivision
%
% NOTA: ELEGIR SOLAMENTE UNO
net.divideFcn = 'dividerand'; % Divide data randomly
net.divideMode = 'sample'; % Divide up every sample
net.divideParam.trainRatio = 100/100;
net.divideParam.valRatio = 0/100;
net.divideParam.testRatio = 0/100;
net.trainParam.max_fail = 10;
net.trainParam.epochs = 2000;
net.performParam.normalization = 'standard';
% Elección de una función de representación del error
% Si queremos ver una lista de funciones de representación: help nnperformance
%
% NOTA: ELEGIR SOLAMENTE UNO
net.performFcn = 'mse'; % Error cuadrático medio.
% Elección de funciones de representación (Plot Functions)
% Para una lista con todos los tipos de funciones de representación: help nnplot
%
% NOTA: ELEGIR SOLAMENTE UNO
net.plotFcns = {'plotperform','plottrainstate','ploterrhist', ...
'plotconfusion','plotfit', 'plotroc'};
% Train the Network
[net,tr] = train(net,x,t);
% Test the Network
y = net(x);
e = gsubtract(t,y);
performance = perform(net,t,y);
tind = vec2ind(t);
yind = vec2ind(y);
percentErrors = sum(tind ~= yind)/numel(tind);
% Recálculo de Training, Validation y Test Performance
trainTargets = t .* tr.trainMask{1};
valTargets = t .* tr.valMask{1};
testTargets = t .* tr.testMask{1};
trainPerformance = perform(net,trainTargets,y)
valPerformance = perform(net,valTargets,y)
testPerformance = perform(net,testTargets,y)
% Visualización de la red
view(net)
Valora esta pregunta


0