Mam problem ze zrozumieniem czym różni się uczenie od trenowania sieci neuronowych. Czym różni się funkcja learnbpm od trainbpm w Matlabie? Wiem tylko że jedna uczy a druga trenuje.
http://www.ftj.agh.edu.pl/~stegowski/rozne/neurony/OPISNT.htm#learnbpm
learnbpm jest poiedynczym krokiem, a trainbpm jest serią krokuff.
[dW,dB] = learnbpm(X,D,lr,mc, dW,dB) to jeden krok, iteracja, epoka
a trainbpm wywołuje learnbpm dla każdej epoki
piszę właśnie skrypt, mam parę błędów
??? Error using ==> unknown
Matrix dimensions must agree.
Error in ==> tbpx3 at 67
e = t-a3;
Error in ==> trainbpx at 56
[a,b,c,d,e,f,g,h] = tbpx3(i,j,k,l,m,n,o,p,q,r,s,t);
W pierwszym błędzie zapewne chodzi o wymiary macierzy, tylko której jak mam kilka? Nie wiem natomiast o co chodzi w dwóch kolejnych błędach.
Nawet nie napisałeś w czym to w ogóle piszesz?
Prawdopodobnie mnożysz macierze, ale nie przypilnowałeś, żeby miały odpowiednie rozmiary, żeby w ogóle można je mnożyć.
Pamiętaj, że podczas fazy wstecznej propagacji, nie wystarczy mnożenie macierzy tylko, że od końca sieci do początku. Trzeba przypilnować co dokładnie się mnoży.
Powodzenia
W Matlabie.
clear all %czyszczenie wszystkich zmiennych, funkcji i linków MEX z
%workspace-a
nntwarn off
format compact %format danych wyjściowych, brak enter
%przed ans=
P=[
0 1 1 1 0 1 0 0 0 1 1 0 0 1 1 1 0 1 0 1 1 1 0 0 1 1 0 0 0 1 0 1 1 0 0
0 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 1
0 1 1 1 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 1 1
0 1 1 1 0 1 0 0 0 1 0 0 0 0 1 0 0 1 1 0 0 0 0 0 1 1 0 0 0 1 0 1 1 1 0
0 0 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 0 1 0 1 1 1 1 1 0 0 0 1 0 0 0 0 1 0
1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1 0 1 1 1 0
0 1 1 1 0 1 0 0 0 1 1 0 0 0 0 1 1 1 1 0 1 0 0 0 1 1 0 0 0 1 0 1 1 1 0
1 1 1 1 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0
0 1 1 1 0 1 0 0 0 1 1 0 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 0 0 1 0 1 1 1 0
0 1 1 1 0 1 0 0 0 1 1 0 0 0 1 0 1 1 1 1 0 0 0 0 1 1 0 0 0 1 0 1 1 1 0
];
T=[
1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 1
];
P=P';
[R,Q] = size(P);
[S3,Q] = size(T);
S1 = 35;
S2 = 18;
disp_freq=100;
max_epoch=20000;
err_goal=.25;
lr=.01;
lr_inc=1.05;
lr_dec=0.7;
mom=0.95;
errratio = 1.04;
tp = [disp_freq , max_epoch , err_goal , lr, lr_inc, lr_dec, mom, errratio ] ;
[W1,B1,W2,B2,W3,B3] = initff(P,S1,'tansig',S2,'tansig',S3,'purelin');
[W1,B1,W2,B2,W3,B3,TE,TR] = trainbpx(W1,B1,'tansig',W2,B2,'tansig',W3,B3,'purelin',P,T,tp) ;
Ma ktoś jakiegoś starszego matlaba(Na najwowszym nie da się uruchomić, bo się nazwy funkcji chyba zmieniły)? Dlaczego to się w ogóle nie uczy? i jeszcze rzuca się o dzieleni przez zero. Dzięki.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.