Искусственная нейронная сеть в октаве

У меня возникли проблемы с простым упражнением по искусственной нейронной сети с 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

0 ответов

Другие вопросы по тегам