2017-12-27 8 views
0

ich versuchen, dieses Beispiel auszuführen, die für Scilab ANN Toolbox verwendet https://burubaxair.wordpress.com/2014/03/12/artificial-neural-networks-in-scilab/Neural Network in Scilab Erkenntnis

Dies ist Code:

T = [ 
1 1 1 1 1 
0 0 1 0 0 
0 0 1 0 0 
0 0 1 0 0 
0 0 1 0 0 
0 0 1 0 0 
0 0 1 0 0 
]'; 
U = [ 
1 0 0 0 1 
1 0 0 0 1 
1 0 0 0 1 
1 0 0 0 1 
1 0 0 0 1 
1 0 0 0 1 
0 1 1 1 0 
]'; 
N = [35 10 2]; 
W = ann_FF_init(N); 
x = [1, 0, 0, 0, 1; 
1, 0, 0, 0, 1; 
1, 0, 0, 0, 1; 
1, 0, 0, 0, 1; 
1, 0, 0, 0, 1; 
1, 0, 0, 0, 1; 
0, 1, 1, 1, 0]'; 
t_t = [1 0]'; 
t_u = [0 1]'; 
t = [t_t, t_u]; 
lp = [0.01, 1e-4]; 
epochs = 3000; 
W = ann_FF_Std_batch(x,t,N,W,lp,epochs); 
y = ann_FF_run(x,N,W) 
disp(y) 

aber ich erhalte eine Fehlermeldung:

-->exec('D:\Учёба\Задачи\Recognition.sce', -1) 
!--error 15 
Подматрица задана некорректно (Submatrix is incorrect). 
at line  37 of function ann_FF_grad_BP called by : 
at line  25 of function ann_FF_Std_batch called by : 
W = ann_FF_Std_batch(x,t,N,W,lp,epochs); 
at line  33 of exec file called by :  
exec('D:\Учёба\Задачи\Recognition.sce', -1) 

Ein Fehler kann in T- und U-Matrix sein, aber ich verstehe nicht warum. Könntest du erzählen, was ich falsch mache? Vielen Dank!

Antwort

0

Sie haben zwei Fehler im Code gemacht:

  1. Sie sollten nicht Test- und Trainingssätze mischen.
  2. Der Testeingang muss eine einzelne Spalte sein.

Ihr erster Fehler war x = [ 1.... ], weil es ein einzelnes Bild enthalten ist, während Sie in N angegeben, dass Sie zwei Ausgangsneuronen haben. Wie im Beispiel angegeben, sollten Sie haben x = [T,U];

Ihr zweiter Fehler war, x als Test ann_FF_run zu geben. Diese Funktion nimmt die Testeingabe als eine einzelne Spalte. Aber seit du dein NN mit x trainiert hast, kurz bevor es eine 5x7 Matrix war. Ändern Sie es einfach in einen Spaltenvektor.

Hier eine korrigierte und kommentierten Code:

T = [... 
1 1 1 1 1 ... 
0 0 1 0 0 ... 
0 0 1 0 0 ... 
0 0 1 0 0 ... 
0 0 1 0 0 ... 
0 0 1 0 0 ... 
0 0 1 0 0 ... 
]'; 
U = [... 
1 0 0 0 1 ... 
1 0 0 0 1 ... 
1 0 0 0 1 ... 
1 0 0 0 1 ... 
1 0 0 0 1 ... 
1 0 0 0 1 ... 
0 1 1 1 0 ... 
]'; 
// setting the traing set of two image 
xtrain = [T,U]; 
// so each image as 35 pixels so N(1) is 35 
// and we have two images so N($) is 2 
N = [35 10 2]; 
// training the NN 
W = ann_FF_init(N); 
// The expected response for T : 1 for T, 0 for U 
t_t = [1 0]'; 
// The expected response for T : 1 for T, 0 for U 
t_u = [0 1]'; 
// the overall response 
t = [t_t, t_u]; 
// some parameters 
lp = [0.01, 1e-4]; 
epochs = 3000; 
// getting the weight of the trained NN 
W = ann_FF_Std_batch(xtrain,t,N,W,lp,epochs); 

// testing the traing set. 
y = ann_FF_run(xtrain,N,W) 
disp('Testing the traing set') 
disp(y) //should get something close to t ~ [1 0 ; 0 1] 

// testing a distord U 
xtest1 = matrix([1, 0, 0, 0, 1; 
1, 1, 0, 0, 1; 
1, 0, 0, 0, 1; 
1, 0, 0, 0, 1; 
1, 0, 0, 0, 1; 
1, 0, 0, 0, 1; 
0, 1, 1, 1, 1]',-1,1); 
y = ann_FF_run(xtest1,N,W) 
disp('Testing a distored U') 
disp(y) //should get something close to t_u ~ [0 1] 

//testing something different from T and U. should get nothing 
xtest2 = matrix([1, 0, 0, 0, 1; 
1, 1, 0, 0, 1; 
1, 0, 1, 0, 1; 
1, 0, 1, 0, 1; 
0, 0, 1, 1, 1; 
0, 0, 1, 0, 1; 
0, 1, 1, 1, 1]',-1,1); 
y = ann_FF_run(xtest2,N,W) 
disp('Testing something neither T nor U') 
disp(y) 

und die Ausgabe von scilab Konsole

Testing the traing set 

    0.8538757 0.1075397 
    0.1393287 0.8957439 

Testing a distored U 

    0.1078667 
    0.9007755 

Testing something neither T nor U 

    0.3433933 
    0.6306797 
Verwandte Themen