Matlab - Szkolenie sieci neuronowych

Pracuję nad stworzeniem dwuwarstwowej sieci neuronowej z propagacją wsteczną. NN ma pobrać dane z wektora 20001x17, który zawiera następujące informacje w każdym wierszu:

-Pierwsze 16 komórek zawiera liczby całkowite w zakresie od 0 do 15, które działają jako zmienne, które pomagają nam określić, która z 26 liter alfabetu, które chcemy wyrazić, widząc te zmienne. Na przykład seria 16 wartości w następujący sposób ma reprezentować literę A: [2 8 4 5 2 7 5 3 1 6 0 8 2 7 2 7].

-17-ta komórka zawiera liczbę od 1 do 26, reprezentującą literę alfabetu, którą chcemy. 1 oznacza A, 2 oznacza B itd.

Warstwa wyjściowa NN składa się z 26 wyjść. Za każdym razem, gdy NN jest zasilany, wejście takie jak to opisane powyżej powinno wysyłać wektor 1x26 zawierający zera we wszystkich komórkach oprócz jednej, która odpowiada literze, którą wartości wejściowe miały reprezentować. na przykład wyjście [1 0 0 ... 0] będzie literą A, podczas gdy [0 0 0 ... 1] będzie literą Z.

Niektóre rzeczy, które są ważne, zanim przedstawię kod: Muszę użyć funkcji traingdm, a ukryty numer warstwy jest naprawiony (na razie) w 21.

Próbując stworzyć powyższą koncepcję, napisałem następujący kod matlab:

%%%%%%%%
%Start of code%
%%%%%%%%

%
%Initialize the input and target vectors
%
p = zeros(16,20001);
t = zeros(26,20001);

%
%Fill the input and training vectors from the dataset provided
%
for i=2:20001
    for k=1:16
        p(k,i-1) = data(i,k);
    end
    t(data(i,17),i-1) = 1;
end

net = newff(minmax(p),[21 26],{'logsig' 'logsig'},'traingdm');

y1 = sim(net,p);

net.trainParam.epochs = 200;
net.trainParam.show = 1;
net.trainParam.goal = 0.1;
net.trainParam.lr = 0.8;
net.trainParam.mc = 0.2;
net.divideFcn = 'dividerand';
net.divideParam.trainRatio = 0.7;
net.divideParam.testRatio = 0.2;
net.divideParam.valRatio = 0.1;

%[pn,ps] = mapminmax(p);
%[tn,ts] = mapminmax(t);

net = init(net);
[net,tr] = train(net,p,t);

y2 = sim(net,pn);

%%%%%%%%
%End of code%
%%%%%%%%

Teraz do mojego problemu: chcę, aby moje dane wyjściowe były zgodne z opisem, a mianowicie każda kolumna wektora y2 powinna być na przykład reprezentacją litery. Mój kod tego nie robi. Zamiast tego uzyskano wyniki, które różnią się znacznie między 0 a 1, wartości od 0,1 do 0,9.

Moje pytanie brzmi: czy jest jakaś konwersja, której potrzebuję, aby to zrobić? Czyli muszę konwertować dane wejściowe i / lub wyjściowe na formularz, dzięki któremu mogę sprawdzić, czy mój NN uczy się poprawnie?

Wszelkie dane będą mile widziane.

questionAnswers(4)

yourAnswerToTheQuestion