
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.
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
- archivos_bases.rar(20,3 KB)
Valora esta pregunta


0