2016-10-18 3 views
1

Я попытался вручную имитировать нейронную сеть, обученную набором инструментов Matlab с 10 слоями. В соответствии с этим info, я должен масштабировать вход до диапазона [-1,1] (выход нормализуется до [0,1], а также должен быть уменьшен с [-1,1]). Я сравниваю с симовой функцией Matlab, и есть огромное искажение выхода, как показано в этом , где верхний график - это ручное моделирование, а нижняя - функция sim-матрицы Matlab. Вот мой простой код.Вручную имитировать нейронную сеть Matlab

clear all; 
% x = [0;0;0;0;0;0;0;1;0;0.111;0]; 
load etp_input; 
% t = [0.45]; 
load etp_target; 
load ETp01.mat; 
iw = ETp01.IW{1,1}; 
lw1 = ETp01.LW{2,1}; 
lw2 = ETp01.LW{3,2}; 
lw3 = ETp01.LW{4,3}; 
lw4 = ETp01.LW{5,4}; 
lw5 = ETp01.LW{6,5}; 
lw6 = ETp01.LW{7,6}; 
lw7 = ETp01.LW{8,7}; 
lw8 = ETp01.LW{9,8}; 
lw9 = ETp01.LW{10,9}; 
b1 = ETp01.b{1}; 
b2 = ETp01.b{2}; 
b3 = ETp01.b{3}; 
b4 = ETp01.b{4}; 
b5 = ETp01.b{5}; 
b6 = ETp01.b{6}; 
b7 = ETp01.b{7}; 
b8 = ETp01.b{8}; 
b9 = ETp01.b{9}; 
b10 = ETp01.b{10}; 
for i=1:365 
    x = etp_input(:,i+19*365)*2-1; 
    xs = etp_input(:,i+19*365); 
    y1 = tansig(iw*x + b1); 
    y2 = tansig(lw1*y1 + b2); 
    y3 = tansig(lw2*y2 + b3); 
    y4 = tansig(lw3*y3 + b4); 
    y5 = tansig(lw4*y4 + b5); 
    y6 = tansig(lw5*y5 + b6); 
    y7 = tansig(lw6*y6 + b7); 
    y8 = tansig(lw7*y7 + b8); 
    y9 = tansig(lw8*y8 + b9); 
    y10 = purelin(lw9*y9 + b10); 
    outManual(i) = (y10+1)/2; 
    outSim(i) = sim(ETp01,xs); 
end 
subplot(2,1,1); 
plot(outManual); 
subplot(2,1,2); 
plot(outSim); 

У меня есть годовой набор данных, поэтому я делаю 365 для цикла. Итак, что мне здесь не хватает? У меня есть тонны годовых данных, и они просто случайным образом дали разные искажения вывода (код выше с использованием 19-го набора данных). Любая помощь будет оценена по достоинству. Это часть кода, поэтому мне нужна дополнительная информация, пожалуйста, дайте мне знать. Спасибо вам всем. : D: D: D

Отредактировано:

  • Я использую nntool создать сеть и сохранить объект сети в мат файла. Полный код обновляется выше.
  • Вот network view от Matlab.
+0

Можете ли вы показать, как вы создаете свой NN в MATLAB? Пожалуйста, попробуйте опубликовать [mcve]. Кроме того, разница не так уж плоха. –

+0

Я обновил код и добавлю изображение сети в сообщение. Благодарю. –

+0

'a1, a2, a3, a4 ...' не очень хорошая идея. Я предлагаю вам использовать 3D-матрицы или массивы ячеек ... –

ответ

0

Я нашел решение. Используемое масштабирование - это правильная идея, но мой вход не имеет того же диапазона (последние два элемента находятся в [0,0.777], а первые 9 элементов - [0, 1]). Поэтому я должен масштабировать их отдельно. (см. функцию mapminmax в Matlab). Спасибо stackoverflow ...: D

Смежные вопросы