Backprop в нейронной сети один цикл while

#matlab #neural-network #backpropagation

Вопрос:

У кого-нибудь есть опыт обучения нейронной сети с обратной связью с обратным распространением?

Если я выполню свою итерацию из 201 значения от -1 до 1, прогнозируемый результат будет выглядеть великолепно.

Даже если я расширю итерацию на 200 000, но останусь в цикле for, результат будет выглядеть великолепно.

Но если вместо этого я добавлю первую строку цикла while, я получу этот большой выпуклость при x=0.введите описание изображения здесь

Нейронная сеть легко усваивает сеть. Однако я использую инкрементное обучение и хотел бы много раз проходить цикл for(эпохи). Каким-то образом, когда мы выходим из цикла и запускаем цикл while для эпох, я получаю результат, отклоняющийся от целевого значения. Есть какие-нибудь идеи?

Функция, которую мы тренируем, равна y=2x^2 1

ФРАГМЕНТ ОСНОВНОЙ ЧАСТИ КОДА

 '''
%while epoch <10

for index2  = 1:1:201
 
z = index2
%first solve for activation vector values   
a(1) = w(1)*xInput(z);
a(2) = w(2)*xInput(z);
a(3) = w(3)*xInput(z);
a(4) = w(4)*xInput(z);
a(5) = w(5)*xInput(z);

d(1) = 1/(1 exp(-a(1)));
d(2) = 1/(1 exp(-a(2)));
d(3) = 1/(1 exp(-a(3)));
d(4) = 1/(1 exp(-a(4)));
d(5) = 1/(1 exp(-a(5)));


%next use second set of weights along with decision vector to find 

yPredicted(z) = d(1)*v(1) d(2)*v(2) d(3)*v(3) d(4)*v(4) d(5)*v(5);

%next begin the back propogation (3)

deltaY = yTarget(z)-yPredicted(z);

errorY(z) = (0.5)* ((yTarget(z)-yPredicted(z))^2);

%our first error was calculated, we can use this to try to train nn
%new values for weights

%next calculate transpose of b weights
dTranspose = d.'; 
vTranspose = v.';
xInputTranspose = xInput.';

dErr = -vTranspose*deltaY;

aErr(1) = d(1)*(1-d(1))*dErr(1);
aErr(2) = d(2)*(1-d(2))*dErr(2);
aErr(3) = d(3)*(1-d(3))*dErr(3);
aErr(4) = d(4)*(1-d(4))*dErr(4);
aErr(5) = d(5)*(1-d(5))*dErr(5);

weightError = aErr*xInput(index2);

deltaVOld = deltaV;
deltaWOld = deltaW;

deltaV = learningGain*deltaY*dTranspose momentumGain*deltaVOld; 

v(1) = v(1) deltaV(1);
v(2) = v(2) deltaV(2);
v(3) = v(3) deltaV(3);
v(4) = v(4) deltaV(4);
v(5) = v(5) deltaV(5);

deltaW = learningGain*(-weightError) (momentumGain*deltaWOld);

w(1) = w(1)   deltaW(1);
w(2) = w(2)   deltaW(2);
w(3) = w(3)   deltaW(3);
w(4) = w(4)   deltaW(4);
w(5) = w(5)   deltaW(5);

end;

%epoch = epoch 1;

end;