Uczenie a trenowanie sieci

0

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.

1

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

0

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.

0

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

0

W Matlabie.

0
 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.