Matlab - codigo de RNA Backprogation

 
Vista:
sin imagen de perfil

codigo de RNA Backprogation

Publicado por Claudia (1 intervención) el 15/10/2013 20:11:31
Hola a todos , soy nueva en el foro y de antemano gracias por la atencion prestada, ya que ando un poco frustrada.
Estoy realizando un programa para el entrenamiento de una RNA tipo backpropagation con 400 firmas para su entrenamiento, se supone que debería poder entrenarse con todas pero únicamente con la primera firma que entra lo hace bien, si le introduzco las 400 no hace un buen entrenamiento ya que en la salida arroja los mismos números para las 400 firmas de entrada, el código que realice lo hice en base a un libro de RNA "Artificial Intelligence" de Michael Negnevistsky, en la sección de Multilayes neural networks hay una ejemplo que mi codigo lo hace bien, por favor revisen mi código y vean que es lo que hace mal ya que no puede entrenarse con un conjunto mayor y por consecuencia no reconoce bien, les mando el codigo y las bases de firmas P, salidas T y pesos iniciales W1. Les agradezco su atención y espero respuestas, gracias.

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
%programa experimental
clear all,clc
P=importdata('C:\Users\Caic\Desktop\CLAUDIA\SEMINARIOII\Simulaciones\base64r.mat');%cargando las bases de datos
T=importdata('C:\Users\Caic\Desktop\CLAUDIA\SEMINARIOII\Simulaciones\etiquetas64r.mat');
w1=importdata('C:\Users\Caic\Desktop\CLAUDIA\SEMINARIOII\Simulaciones\pesos_w1.mat');
w2=[-1.38839370973915,1.55113772981605,-1.38944707040479];%pesos iniciales
b1=[3.89027166249982;-1.03086826953328;-2.24910431510084];%bias iniciales
b2=0.5;
%   w1=[0.5, 0.4;0.9,1.0]; %%ejemplo libro
%   w2=[-1.2 1.1];
%   b1=[0.8 -0.1];
%   b2=[0.3];
%   P=[1;1];
%   T=[0];
 
alfa=0.1;
CotaError = 0.001;
MAX_ITERA = 2000;%numero maximo de epocas/alpha .5 valores exactos con 5000 y cota=.0001/con 500 y alpha .5
itera = 1;
ErrorSalida=0;
MSE1=0;
e=[];
pw1=0;
ps1=0;
tic
while  ( itera <= MAX_ITERA  );
    pp=0;
for i=1:length(T)
            p=P(:,i);
            pw1=w1*p;
            a1=logsig(pw1-b1);
            a2(i)=logsig((w2*a1)-b2);
            e(i)=T(i)-a2(i);
            s2=a2(i)*(1-a2(i))*e(i);
            s1aux=[];
            s1aux=eye(length(b1));
            for k=1:length(b1)
                %s1aux(k,k)=(1-a1(k)^2);%Derivada de tansig
                s1aux(k,k)=(1-a1(k))*a1(k);%Derivada de logsig
            end
            S1=s1aux*w2'*s2;
            w2nuevo=alfa*a1*s2;
            t2=alfa*(-1)*s2;
            W1new=alfa*(S1*p');
            t1=alfa*(-1)*S1;
            w1=w1+W1new;
            w2=w2+w2nuevo';
            b2=b2+t2; 
            b1=b1+t1;
end%termina T
   ErrorSalida = (T-a2);% error correspondiente a una epoca
   MSE1(itera) = 0.5*mean(mean(ErrorSalida.^2));%error cuadratico
   
  if MSE1(itera) < CotaError
       disp(sprintf('iteración: %d, MSE: %2.6f%',itera, MSE1(itera)));
      break
  end
           disp(sprintf('iteración: %d, MSE: %2.6f%',itera, MSE1(itera)));
           subplot(221)
           plot(p,'b');
           drawnow;
           subplot(222)
           plot(MSE1);
           drawnow;
itera=itera+1;
end%finaliza while
tiempo=toc/60;
fprintf('Tiempo en segundos:%d',tiempo);
% fase reconocimiento
for i=1:length(T)
            p=P(:,i);
            pw1=w1*p;
            aa1=logsig(pw1-b1);
            aa2(i)=logsig((w2*a1)-b2);
end
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de william

codigo de RNA Backprogation

Publicado por william (13 intervenciones) el 05/03/2014 14:41:57
Puedes dar la explicación de tu código más detallado?. Tienes documentación que puedas facilitar?
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar