Matlab - Обучение нейронной сети

Я работаю над созданием двухслойной нейронной сети с обратным распространением. NN должен получать свои данные из вектора 20001x17, который содержит следующую информацию в каждой строке:

- Первые 16 ячеек содержат целые числа в диапазоне от 0 до 15, которые действуют как переменные, чтобы помочь нам определить, какую из 26 букв алфавита мы хотим выразить при просмотре этих переменных. Например, последовательность из 16 значений, представленных ниже, предназначена для обозначения буквы A: [2 8 4 5 2 7 5 3 1 6 0 8 2 7 2 7].

17-я ячейка содержит число от 1 до 26, представляющее букву алфавита, которую мы хотим. 1 обозначает A, 2 обозначает B и т. Д.

Выходной слой NN состоит из 26 выходов. Каждый раз, когда NN подается на вход, подобный описанному выше, он должен выводить вектор 1x26, содержащий нули во всех, кроме одной ячейки, которая соответствует букве, которую должны были представлять входные значения. например, вывод [1 0 0 ... 0] будет буквой A, тогда как [0 0 0 ... 1] будет буквой Z.

Некоторые вещи, которые важны, прежде чем я представлю код: мне нужно использовать функцию traingdm, и номер скрытого слоя зафиксирован (на данный момент) на 21.

Пытаясь создать вышеуказанную концепцию, я написал следующий код 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%
%%%%%%%%

Теперь о моей проблеме: я хочу, чтобы мои выходные данные были такими, как описано, а именно каждый столбец вектора y2, например, должен представлять собой букву. Мой код не делает этого, хотя. Вместо этого он дал результаты, которые сильно различаются между 0 и 1, значения от 0,1 до 0,9.

Мой вопрос: есть ли какое-то обращение, которое мне нужно делать, чем я не являюсь? То есть мне нужно преобразовать свои входные и / или выходные данные в форму, с помощью которой я могу увидеть, правильно ли учится мой NN?

Любой вклад будет оценен.

Ответы на вопрос(4)

Ваш ответ на вопрос