Искусственная нейронная сеть в октаве
У меня возникли проблемы с простым упражнением по искусственной нейронной сети с 2 функциями, скрытым слоем из 5 нейронов и двумя возможными выходами (0 или 1). мой X
матрица представляет собой матрицу 51x2, и y
является вектором 51x1.
Я знаю, что не должен делать while E>1
но я хотел посмотреть, будет ли моя ошибка меньше 1
Я хотел бы знать, что я делаю неправильно. Кажется, моя ошибка не уменьшается (около 1,5, независимо от того, сколько итераций я делаю). Вы видите в коде, где я делаю ошибку? Я должен использовать градиентный спуск.
function [E, v,w] = costFunction(X, y,alpha1,alpha2)
[m n] = size(X);
E = 1;
v = 2*rand(5,3)-1;
w = 2*rand(2,6)-1;
grad_v=zeros(size(v));
grad_w=zeros(size(w));
K = 2;
E = 2;
while E> 1
a1 = [ones(m,1) X];
z2 = a1 * v';
a2 = sigmoid(z2);
a2 = [ones(size(a2,1),1),a2];
z3 = a2 * w';
h = sigmoid(z3);
cost = sum((-y.*log(h)) - ((1-y).*log(1-h)),2);
E = (1/m)*sum(cost);
Delta1=0;
Delta2=0;
for t = 1:m
a1 = [1;X(t,:)'];
z2 = v * a1;
a2 = sigmoid(z2);
a2 = [1;a2];
z3 = w * a2;
a3 = sigmoid(z3);
d3 = a3 - y(t,:)';
d2 = (w(:,2:end)'*d3).*sigmoidGradient(z2);
Delta2 += (d3*a2');
Delta1 += (d2*a1');
end
grad_v = (1/m) * Delta1;
grad_w = (1/m) * Delta2;
v -= alpha1 * grad_v;
w -= alpha2 * grad_w;
end
end