Code:
function[Fx]=bealeFN(x1,x2)
c=[1.5,2.25,2.625];
Fx=0;
for i=1:3
Fx=Fx+(c(i)-x1*(1-x2^i))^2;
end
function[Fx]=bealeFN(x1,x2)
c=[1.5,2.25,2.625];
Fx=0;
for i=1:3
Fx=Fx+(c(i)-x1*(1-x2^i))^2;
end
Ono što sam ja uradio je sledeće:
Code:
clear;clc;
p=rand(2,100);
[m,n] = size(p);
i=0;
for i = 1:n
p(3,i) = 1;%biasi
R7(i) = 1;
end
brEpoha = 5000;
maxGreska = 1e-5;
korak = 0.8;
greska = zeros(n,1);
momentum = 0.8;
i = 0;
for i=1:n
t(1,i)=bealeFN(p1(1,i),p1(2,i));
end
%inicijalizacija pocetnih vrednosti tezina
%skriveni sloj 1
Wx11(1) = -1 + 2.*rand(1);
Wx21(1) = -1 + 2.*rand(1);
Wx31(1) = -1 + 2.*rand(1);
Wx41(1) = -1 + 2.*rand(1);
Wx51(1) = -1 + 2.*rand(1);
Wx61(1) = -1 + 2.*rand(1);
Wx12(1) = -1 + 2.*rand(1);
Wx22(1) = -1 + 2.*rand(1);
Wx32(1) = -1 + 2.*rand(1);
Wx42(1) = -1 + 2.*rand(1);
Wx52(1) = -1 + 2.*rand(1);
Wx62(1) = -1 + 2.*rand(1);
%tezine biasa1
Wx13(1) = -1 + 2.*rand(1);
Wx23(1) = -1 + 2.*rand(1);
Wx33(1) = -1 + 2.*rand(1);
Wx43(1) = -1 + 2.*rand(1);
Wx53(1) = -1 + 2.*rand(1);
Wx63(1) = -1 + 2.*rand(1);
%skriveni sloj 2
Wy11(1) = -1 + 2.*rand(1);
Wy21(1) = -1 + 2.*rand(1);
Wy12(1) = -1 + 2.*rand(1);
Wy22(1) = -1 + 2.*rand(1);
Wy13(1) = -1 + 2.*rand(1);
Wy23(1) = -1 + 2.*rand(1);
Wy14(1) = -1 + 2.*rand(1);
Wy24(1) = -1 + 2.*rand(1);
Wy15(1) = -1 + 2.*rand(1);
Wy25(1) = -1 + 2.*rand(1);
Wy16(1) = -1 + 2.*rand(1);
Wy26(1) = -1 + 2.*rand(1);
%bias2
Wy17(1) = -1 + 2.*rand(1);
Wy27(1) = -1 + 2.*rand(1);
%izlazni sloj
W11(1) = -1 + 2.*rand(1);
W12(1) = -1 + 2.*rand(1);
W21(1) = -1 + 2.*rand(1);
W22(1) = -1 + 2.*rand(1);
for j = 1: brEpoha
i = 0;
for i = 1 : n
%ulazi neurona skrivenog sloja 1
R11(i) = (Wx11(i) * p(1,i)) + (Wx12(i) * p(2,i)) + (Wx13(i) * p(3,i));
R21(i) = (Wx21(i) * p(1,i)) + (Wx22(i) * p(2,i)) + (Wx23(i) * p(3,i));
R31(i) = (Wx31(i) * p(1,i)) + (Wx32(i) * p(2,i)) + (Wx33(i) * p(3,i));
R41(i) = (Wx41(i) * p(1,i)) + (Wx42(i) * p(2,i)) + (Wx43(i) * p(3,i));
R51(i) = (Wx51(i) * p(1,i)) + (Wx52(i) * p(2,i)) + (Wx53(i) * p(3,i));
R61(i) = (Wx61(i) * p(1,i)) + (Wx62(i) * p(2,i)) + (Wx63(i) * p(3,i));
%izlaz neurona skrivenog sloja 1
R1(i) = logsig(R11(i));
R2(i) = logsig(R21(i));
R3(i) = logsig(R31(i));
R4(i) = logsig(R41(i));
R5(i) = logsig(R51(i));
R6(i) = logsig(R61(i));
%ulazi neurona skrivenog sloja 2
R12(i) = (R1(i) * Wy11(i)) + (R2(i)*Wy12(i)) + (R3(i)*Wy13(i)) + (R4(i)*Wy14(i)) + (R5(i)*Wy15(i)) + (R6(i)*Wy16(i)) + (R7(i)*Wy17(i));
R22(i) = (R1(i) * Wy21(i)) + (R2(i)*Wy22(i)) + (R3(i)*Wy23(i)) + (R4(i)*Wy24(i)) + (R5(i)*Wy25(i)) + (R6(i)*Wy26(i)) + (R7(i)*Wy27(i));
%izlaz neurona skrivenog sloja 2
S1(i) = logsig(R12(i));
S2(i) = logsig(R22(i));
%ulaz izlaznog neurona
Y1(i) = S1(i)*W11(i) + S2(i)*W12(i);
Y2(i) = S1(i)*W21(i) + S2(i)*W22(i);
%izlaz mreze
y1(i) = logsig(Y1(i));
y2(i) = logsig(Y2(i));
%gradijent izlaza
greska_izl1(i) = y1(i) * (1 - y1(i)) * (p(1,i) - y1(i));
greska_izl2(i) = y2(i) * (1 - y2(i)) * (p(2,i) - y2(i));
greska(j,i) = sum(abs(p(1,i) - y1(i)) + abs(p(2,i) - y2(i)));
%greska(j,i) = sum(sum(abs(t(i) - y(i))./2));
if greska(j,i) > maxGreska
%promena vrednosti izlaznih tezina
W11(i+1) = W11(i) + (korak * greska_izl1(i) * S1(i));
W12(i+1) = W12(i) + (korak * greska_izl2(i) * S1(i));
W21(i+1) = W21(i) + (korak * greska_izl1(i) * S2(i));
W22(i+1) = W22(i) + (korak * greska_izl2(i) * S2(i));
%gradijenti drugog skrivenog sloja
greska_s1(i) = S1(i) * (1 - S1(i)) * (greska_izl1(i) * W11(i) + greska_izl2(i) * W12(i));
greska_s2(i) = S2(i) * (1 - S2(i)) * (greska_izl1(i) * W21(i) + greska_izl2(i) * W22(i));
%promena tezina skrivenog sloja
Wy11(i+1) = Wy11(i) + (korak * greska_s1(i) * R1(i));
Wy12(i+1) = Wy12(i) + (korak * greska_s1(i) * R2(i));
Wy13(i+1) = Wy13(i) + (korak * greska_s1(i) * R3(i));
Wy14(i+1) = Wy14(i) + (korak * greska_s1(i) * R4(i));
Wy15(i+1) = Wy15(i) + (korak * greska_s1(i) * R5(i));
Wy16(i+1) = Wy16(i) + (korak * greska_s1(i) * R6(i));
Wy17(i+1) = Wy17(i) + (korak * greska_s1(i) * R7(i));
Wy21(i+1) = Wy21(i) + (korak * greska_s2(i) * R1(i));
Wy22(i+1) = Wy22(i) + (korak * greska_s2(i) * R2(i));
Wy23(i+1) = Wy23(i) + (korak * greska_s2(i) * R3(i));
Wy24(i+1) = Wy24(i) + (korak * greska_s2(i) * R4(i));
Wy25(i+1) = Wy25(i) + (korak * greska_s2(i) * R5(i));
Wy26(i+1) = Wy26(i) + (korak * greska_s2(i) * R6(i));
Wy27(i+1) = Wy27(i) + (korak * greska_s2(i) * R7(i));
%gradijenti prvog skrivenog sloja
greska_R1(i) = R1(i) * (1 - R1(i)) * (greska_s1(i) * Wy11(i) + greska_s2(i) * Wy21(i));
greska_R2(i) = R2(i) * (1 - R2(i)) * (greska_s1(i) * Wy12(i) + greska_s2(i) * Wy22(i));
greska_R3(i) = R3(i) * (1 - R3(i)) * (greska_s1(i) * Wy13(i) + greska_s2(i) * Wy23(i));
greska_R4(i) = R4(i) * (1 - R4(i)) * (greska_s1(i) * Wy14(i) + greska_s2(i) * Wy24(i));
greska_R5(i) = R5(i) * (1 - R5(i)) * (greska_s1(i) * Wy15(i) + greska_s2(i) * Wy25(i));
greska_R6(i) = R6(i) * (1 - R6(i)) * (greska_s1(i) * Wy16(i) + greska_s2(i) * Wy26(i));
%promena tezina izmedju ulaznog i prvog skrivenog sloja
Wx11(i+1) = Wx11(i) + (korak * greska_R1(i) * p(1,i));
Wx21(i+1) = Wx21(i) + (korak * greska_R2(i) * p(1,i));
Wx31(i+1) = Wx31(i) + (korak * greska_R3(i) * p(1,i));
Wx41(i+1) = Wx41(i) + (korak * greska_R4(i) * p(1,i));
Wx51(i+1) = Wx51(i) + (korak * greska_R5(i) * p(1,i));
Wx61(i+1) = Wx61(i) + (korak * greska_R6(i) * p(1,i));
Wx12(i+1) = Wx12(i) + (korak * greska_R1(i) * p(2,i));
Wx22(i+1) = Wx22(i) + (korak * greska_R2(i) * p(2,i));
Wx32(i+1) = Wx32(i) + (korak * greska_R3(i) * p(2,i));
Wx42(i+1) = Wx42(i) + (korak * greska_R4(i) * p(2,i));
Wx52(i+1) = Wx52(i) + (korak * greska_R5(i) * p(2,i));
Wx62(i+1) = Wx62(i) + (korak * greska_R6(i) * p(2,i));
Wx13(i+1) = Wx13(i) + (korak * greska_R1(i) * p(3,i));
Wx23(i+1) = Wx23(i) + (korak * greska_R2(i) * p(3,i));
Wx33(i+1) = Wx33(i) + (korak * greska_R3(i) * p(3,i));
Wx43(i+1) = Wx43(i) + (korak * greska_R4(i) * p(3,i));
Wx53(i+1) = Wx53(i) + (korak * greska_R5(i) * p(3,i));
Wx63(i+1) = Wx63(i) + (korak * greska_R6(i) * p(3,i));
else
break;
end
end
end
for i = 1:n
y(i) = bealeFN(y1(i),y2(i));
end
k=1:1:n;
plot(k,t(1,:),'Or',k,y,'*g')
title('Realna vrednost - O Vrednost ostvarena mrezom(aproksimacija) - *')
xlabel('Broj test funkcija');
ylabel('Stvarna vrednost, Ostvarena vrednost');
clear;clc;
p=rand(2,100);
[m,n] = size(p);
i=0;
for i = 1:n
p(3,i) = 1;%biasi
R7(i) = 1;
end
brEpoha = 5000;
maxGreska = 1e-5;
korak = 0.8;
greska = zeros(n,1);
momentum = 0.8;
i = 0;
for i=1:n
t(1,i)=bealeFN(p1(1,i),p1(2,i));
end
%inicijalizacija pocetnih vrednosti tezina
%skriveni sloj 1
Wx11(1) = -1 + 2.*rand(1);
Wx21(1) = -1 + 2.*rand(1);
Wx31(1) = -1 + 2.*rand(1);
Wx41(1) = -1 + 2.*rand(1);
Wx51(1) = -1 + 2.*rand(1);
Wx61(1) = -1 + 2.*rand(1);
Wx12(1) = -1 + 2.*rand(1);
Wx22(1) = -1 + 2.*rand(1);
Wx32(1) = -1 + 2.*rand(1);
Wx42(1) = -1 + 2.*rand(1);
Wx52(1) = -1 + 2.*rand(1);
Wx62(1) = -1 + 2.*rand(1);
%tezine biasa1
Wx13(1) = -1 + 2.*rand(1);
Wx23(1) = -1 + 2.*rand(1);
Wx33(1) = -1 + 2.*rand(1);
Wx43(1) = -1 + 2.*rand(1);
Wx53(1) = -1 + 2.*rand(1);
Wx63(1) = -1 + 2.*rand(1);
%skriveni sloj 2
Wy11(1) = -1 + 2.*rand(1);
Wy21(1) = -1 + 2.*rand(1);
Wy12(1) = -1 + 2.*rand(1);
Wy22(1) = -1 + 2.*rand(1);
Wy13(1) = -1 + 2.*rand(1);
Wy23(1) = -1 + 2.*rand(1);
Wy14(1) = -1 + 2.*rand(1);
Wy24(1) = -1 + 2.*rand(1);
Wy15(1) = -1 + 2.*rand(1);
Wy25(1) = -1 + 2.*rand(1);
Wy16(1) = -1 + 2.*rand(1);
Wy26(1) = -1 + 2.*rand(1);
%bias2
Wy17(1) = -1 + 2.*rand(1);
Wy27(1) = -1 + 2.*rand(1);
%izlazni sloj
W11(1) = -1 + 2.*rand(1);
W12(1) = -1 + 2.*rand(1);
W21(1) = -1 + 2.*rand(1);
W22(1) = -1 + 2.*rand(1);
for j = 1: brEpoha
i = 0;
for i = 1 : n
%ulazi neurona skrivenog sloja 1
R11(i) = (Wx11(i) * p(1,i)) + (Wx12(i) * p(2,i)) + (Wx13(i) * p(3,i));
R21(i) = (Wx21(i) * p(1,i)) + (Wx22(i) * p(2,i)) + (Wx23(i) * p(3,i));
R31(i) = (Wx31(i) * p(1,i)) + (Wx32(i) * p(2,i)) + (Wx33(i) * p(3,i));
R41(i) = (Wx41(i) * p(1,i)) + (Wx42(i) * p(2,i)) + (Wx43(i) * p(3,i));
R51(i) = (Wx51(i) * p(1,i)) + (Wx52(i) * p(2,i)) + (Wx53(i) * p(3,i));
R61(i) = (Wx61(i) * p(1,i)) + (Wx62(i) * p(2,i)) + (Wx63(i) * p(3,i));
%izlaz neurona skrivenog sloja 1
R1(i) = logsig(R11(i));
R2(i) = logsig(R21(i));
R3(i) = logsig(R31(i));
R4(i) = logsig(R41(i));
R5(i) = logsig(R51(i));
R6(i) = logsig(R61(i));
%ulazi neurona skrivenog sloja 2
R12(i) = (R1(i) * Wy11(i)) + (R2(i)*Wy12(i)) + (R3(i)*Wy13(i)) + (R4(i)*Wy14(i)) + (R5(i)*Wy15(i)) + (R6(i)*Wy16(i)) + (R7(i)*Wy17(i));
R22(i) = (R1(i) * Wy21(i)) + (R2(i)*Wy22(i)) + (R3(i)*Wy23(i)) + (R4(i)*Wy24(i)) + (R5(i)*Wy25(i)) + (R6(i)*Wy26(i)) + (R7(i)*Wy27(i));
%izlaz neurona skrivenog sloja 2
S1(i) = logsig(R12(i));
S2(i) = logsig(R22(i));
%ulaz izlaznog neurona
Y1(i) = S1(i)*W11(i) + S2(i)*W12(i);
Y2(i) = S1(i)*W21(i) + S2(i)*W22(i);
%izlaz mreze
y1(i) = logsig(Y1(i));
y2(i) = logsig(Y2(i));
%gradijent izlaza
greska_izl1(i) = y1(i) * (1 - y1(i)) * (p(1,i) - y1(i));
greska_izl2(i) = y2(i) * (1 - y2(i)) * (p(2,i) - y2(i));
greska(j,i) = sum(abs(p(1,i) - y1(i)) + abs(p(2,i) - y2(i)));
%greska(j,i) = sum(sum(abs(t(i) - y(i))./2));
if greska(j,i) > maxGreska
%promena vrednosti izlaznih tezina
W11(i+1) = W11(i) + (korak * greska_izl1(i) * S1(i));
W12(i+1) = W12(i) + (korak * greska_izl2(i) * S1(i));
W21(i+1) = W21(i) + (korak * greska_izl1(i) * S2(i));
W22(i+1) = W22(i) + (korak * greska_izl2(i) * S2(i));
%gradijenti drugog skrivenog sloja
greska_s1(i) = S1(i) * (1 - S1(i)) * (greska_izl1(i) * W11(i) + greska_izl2(i) * W12(i));
greska_s2(i) = S2(i) * (1 - S2(i)) * (greska_izl1(i) * W21(i) + greska_izl2(i) * W22(i));
%promena tezina skrivenog sloja
Wy11(i+1) = Wy11(i) + (korak * greska_s1(i) * R1(i));
Wy12(i+1) = Wy12(i) + (korak * greska_s1(i) * R2(i));
Wy13(i+1) = Wy13(i) + (korak * greska_s1(i) * R3(i));
Wy14(i+1) = Wy14(i) + (korak * greska_s1(i) * R4(i));
Wy15(i+1) = Wy15(i) + (korak * greska_s1(i) * R5(i));
Wy16(i+1) = Wy16(i) + (korak * greska_s1(i) * R6(i));
Wy17(i+1) = Wy17(i) + (korak * greska_s1(i) * R7(i));
Wy21(i+1) = Wy21(i) + (korak * greska_s2(i) * R1(i));
Wy22(i+1) = Wy22(i) + (korak * greska_s2(i) * R2(i));
Wy23(i+1) = Wy23(i) + (korak * greska_s2(i) * R3(i));
Wy24(i+1) = Wy24(i) + (korak * greska_s2(i) * R4(i));
Wy25(i+1) = Wy25(i) + (korak * greska_s2(i) * R5(i));
Wy26(i+1) = Wy26(i) + (korak * greska_s2(i) * R6(i));
Wy27(i+1) = Wy27(i) + (korak * greska_s2(i) * R7(i));
%gradijenti prvog skrivenog sloja
greska_R1(i) = R1(i) * (1 - R1(i)) * (greska_s1(i) * Wy11(i) + greska_s2(i) * Wy21(i));
greska_R2(i) = R2(i) * (1 - R2(i)) * (greska_s1(i) * Wy12(i) + greska_s2(i) * Wy22(i));
greska_R3(i) = R3(i) * (1 - R3(i)) * (greska_s1(i) * Wy13(i) + greska_s2(i) * Wy23(i));
greska_R4(i) = R4(i) * (1 - R4(i)) * (greska_s1(i) * Wy14(i) + greska_s2(i) * Wy24(i));
greska_R5(i) = R5(i) * (1 - R5(i)) * (greska_s1(i) * Wy15(i) + greska_s2(i) * Wy25(i));
greska_R6(i) = R6(i) * (1 - R6(i)) * (greska_s1(i) * Wy16(i) + greska_s2(i) * Wy26(i));
%promena tezina izmedju ulaznog i prvog skrivenog sloja
Wx11(i+1) = Wx11(i) + (korak * greska_R1(i) * p(1,i));
Wx21(i+1) = Wx21(i) + (korak * greska_R2(i) * p(1,i));
Wx31(i+1) = Wx31(i) + (korak * greska_R3(i) * p(1,i));
Wx41(i+1) = Wx41(i) + (korak * greska_R4(i) * p(1,i));
Wx51(i+1) = Wx51(i) + (korak * greska_R5(i) * p(1,i));
Wx61(i+1) = Wx61(i) + (korak * greska_R6(i) * p(1,i));
Wx12(i+1) = Wx12(i) + (korak * greska_R1(i) * p(2,i));
Wx22(i+1) = Wx22(i) + (korak * greska_R2(i) * p(2,i));
Wx32(i+1) = Wx32(i) + (korak * greska_R3(i) * p(2,i));
Wx42(i+1) = Wx42(i) + (korak * greska_R4(i) * p(2,i));
Wx52(i+1) = Wx52(i) + (korak * greska_R5(i) * p(2,i));
Wx62(i+1) = Wx62(i) + (korak * greska_R6(i) * p(2,i));
Wx13(i+1) = Wx13(i) + (korak * greska_R1(i) * p(3,i));
Wx23(i+1) = Wx23(i) + (korak * greska_R2(i) * p(3,i));
Wx33(i+1) = Wx33(i) + (korak * greska_R3(i) * p(3,i));
Wx43(i+1) = Wx43(i) + (korak * greska_R4(i) * p(3,i));
Wx53(i+1) = Wx53(i) + (korak * greska_R5(i) * p(3,i));
Wx63(i+1) = Wx63(i) + (korak * greska_R6(i) * p(3,i));
else
break;
end
end
end
for i = 1:n
y(i) = bealeFN(y1(i),y2(i));
end
k=1:1:n;
plot(k,t(1,:),'Or',k,y,'*g')
title('Realna vrednost - O Vrednost ostvarena mrezom(aproksimacija) - *')
xlabel('Broj test funkcija');
ylabel('Stvarna vrednost, Ostvarena vrednost');
Dakle, neuronska mreža ima 2 ulazna neurona, 6 u prvom skrivenom sloju, 2 u drugom skrivenom sloju i dva izlaza. Ono što mene muči je sledeće:
Da li ja na ulaz neuronske mreže dovodim ulaze Beale-ove fje u mom slučaju p(1,i) i p(2,i) ili dovodim t(i) koji sadrži vredonst nakon beale fje, odnosno željene vrednosti?
Da li na izlazu neuronske mreže u slučaju da dovodim samo t(i) imam jedan izlaz ili više njih?
Gde i kada treba da računam grešku koja će mi predstavljati kriterijum završetka obuke?
Kako napisati sledeću formulu za grešku:
http://clip2net.com/s/5OEjah
Sve sam probao, ali jednostavno na izlazu mreže ne mogu dobiti ono što dobijem sa Beale fjom. Kontam da je to zbog toga što na izlazu NM koristim sigmoidu funkciju koja mi izlaz sabije na opseg 0-1, a izlazi beale fje su negde u opsegu od 5-15. Ukoliko neko zna kako da rešim ovaj problem, bio bih mu zahvalan.
Napomena: Ovaj kod mora biti uradjen ručno, ne smem koristiti nnstart ugradjeni matlabov alat za neuronske mreže.