Как я вижу, в параметре divideParam
есть ошибка. Вы создали нейронную сеть как nn
, но измененные вами параметры принадлежат переменной с именем net
. Помимо этого, создание части нейронной сети является нормальным.
Я думаю, что проблема заключается в части подготовки данных.
Ваша цель тренировки, target_in
, имеет размерность 1 x <Номер образца> . По этой причине функция train
заменяет «softmax» на «logsig», чтобы соответствовать выводу.
Выходные данные для softmax должны быть в форме <Номер результата> x <Номер образца>
Например, выходное значение равно 1,2 или 3. Тогда выходной массив не должен быть
[1 2 1 3 3 1 ...]
но это должно быть
[1 0 1 0 0 1 ...;
0 1 0 0 0 0 ...;
0 0 0 1 1 0 ...]
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ: Чтобы превратить один массив ( 1 x <Номер выборки> ) в множественный массив ( <Номер результата> x <Номер выборки> ), Данные в одном массиве будут отображаться с индексом. Например, 11 выборок в одном массиве:
[-1 -5.5 4 0 3.3 4 -1 0 0 0 -1]
Проверка всех уникальных номеров и сортировка. Теперь у каждого номера есть свой индекс.
[-5.5 -1 0 3.3 4] #index table
Проходя по одному массиву, для каждого числа поместите его в правильный индекс. В основном, -1 будет иметь индекс 2, поэтому я буду отмечать 1 во втором ряду в любом столбце, где появляется -1. Наконец,
[ 0 1 0 0 0 0 0 0 0 0 0;
1 0 0 0 0 0 1 0 0 0 1; #there are three -1 in the single array
0 0 0 1 0 0 0 1 1 1 0;
0 0 0 0 1 0 0 0 0 0 0;
0 0 1 0 0 1 0 0 0 0 0]
Вот код для этого:
idx = sort(unique(target_in));
number_of_result = size(idx,2);
number_of_sample = size(target_in,2);
target_softmax = zeros(number_of_result,number_of_sample);
for i = 1:number_of_sample
place = find(idx == target_in(i)); % find the index of the value
target_softmax(place,i) = 1; % tick 1 at the row
end