Witam. mam pewien problem otóż potrzebuję zmodyfikować to co już mam w taki sposób aby dla metody zapisanej w “trainpid” mozna było uzywać sieci wielowarstwowej (w funkcji “newff” wówczas w nawiasie kwadratowym jest liczba podająca ile neuronów jest w warstwie/warstwach ukrytej)
% uczenie neuronu metoda PID
k=1;
Ti=1;
Td=1;
X=[2 7 8 10 15 -4 0 10 -6 -10
11 10 16 -6 -10 6 7 -15 -7 -4
1 1 1 1 1 1 1 1 1 1];
Z=[0 0 0 0 0 1 1 1 1 1];
W(1)=rand;
W(2)=rand;
W(3)=rand;
I_suma=0;
delta_old=0;
j=1;
E=mse(Z-logsig(W*X));
j=0; %liczba epok
while E(length(E)) > 0.001 & j < 1000
ii=randperm(10);
for k=1:length(ii)
i=ii(k);
u=W*X(:,i);
y=logsig(u);
delta=Z(i)-y;
W=W+k*(delta+(I_suma+delta/Ti)+Td*(delta_old-delta))*X(:,i)';
end
e=mse(Z-logsig(W*X));
E=[E e];
j=j+1;
end
%plot(E,'r')
clear all
P=[2 7 8 10 15 -4 0 10 -6 -10
11 10 16 -6 -10 6 7 -15 -7 -4
];
T=[0 0 0 0 0 1 1 1 1 1];
net=newff(P,T,[3],{'purelin','tansig'},'trainpid');
net.trainParam.Td=1;
net.trainParam.k=1;
net.trainParam.Ti=1;
net.trainParam.min_grad=1e-1000;
net.trainParam.epochs=1000;
net.trainParam.show=1;
net.trainParam.max_fail=10;
net.trainParam.goal=0.000001;
net.trainParam.lr=0.1;
net.divideParam.trainRatio=100; % jaki procent zbioru jest wykorzystywany do uczenia
net.divideParam.valRatio=0; % do walidacji
net.divideParam.testRatio=0;
net=train(net,P,T);
Funkcje które są wykorzystywane bezpośrednio kończą sie na “pid”
– Dodane 16.08.2012 (Cz) 22:18 –
??? help meeeee