Так что, несколько часов ударившись головой о стену, я посмотрел в Интернете решение своей проблемы, и оно отлично сработало.Я просто хочу знать, что вызвало проблему с тем, как я изначально это делал.
вот еще несколько деталей.Входные данные представляют собой изображение размером 20x20 пикселей из набора данных MNIST, и имеется 5000 выборок, поэтому X или A1 - 5000x400.В одном скрытом слое 25 узлов.Выход представляет собой один горячий вектор из 0-9 цифр.y
(не Y, это горячее кодирование y) - это вектор 5000x1 со значением 1-10.
Здесьбыл мой оригинальный код для функции стоимости:
Y = zeros(m, num_labels);
for i = 1:m
Y(i, y(i)) = 1;
endfor
H = sigmoid(Theta2*[ones(1,m);sigmoid(Theta1*[ones(m, 1) X]'))
J = (1/m) * sum(sum((-Y*log(H]))' - (1-Y)*log(1-H]))')))
Но потом я нашел это:
A1 = [ones(m, 1) X];
Z2 = A1 * Theta1';
A2 = [ones(size(Z2, 1), 1) sigmoid(Z2)];
Z3 = A2*Theta2';
H = A3 = sigmoid(Z3);
J = (1/m)*sum(sum((-Y).*log(H) - (1-Y).*log(1-H), 2));
Я вижу, что это может быть немного чище, но что функционально заставляет мой оригинальный кодполучить 304.88
, а другой получить ~ 0.25
?Это умножение по элементам?
К вашему сведению, это та же проблема, что и этот вопрос , если вам нужно выписать формальное уравнение.
Спасибо за любую помощь, я могуполучить!Я очень хочу понять, где я иду не так