Gradient in kontinuierlicher Regression mit einem neuronalen Netzwerk
Ich versuche, eine Regressions-NN mit 3 Ebenen (1 Eingabe-, 1 ausgeblendete und 1 Ausgabeebene mit einem kontinuierlichen Ergebnis) zu implementieren. Als Grundlage nahm ich eine Klassifizierung NN abcoursera.org Klasse, hat aber die Kostenfunktion und die Gradientenberechnung so geändert, dass sie zu einem Regressionsproblem (und nicht zu einem Klassifizierungsproblem) passen:
Meine nnCostFunction ist jetzt:
function [J grad] = nnCostFunctionLinear(nn_params, ...
input_layer_size, ...
hidden_layer_size, ...
num_labels, ...
X, y, lambda)
Theta1 = reshape(nn_params(1:hidden_layer_size * (input_layer_size + 1)), ...
hidden_layer_size, (input_layer_size + 1));
Theta2 = reshape(nn_params((1 + (hidden_layer_size * (input_layer_size + 1))):end), ...
num_labels, (hidden_layer_size + 1));
m = size(X, 1);
a1 = X;
a1 = [ones(m, 1) a1];
a2 = a1 * Theta1';
a2 = [ones(m, 1) a2];
a3 = a2 * Theta2';
Y = y;
J = 1/(2*m)*sum(sum((a3 - Y).^2))
th1 = Theta1;
th1(:,1) = 0; %set bias = 0 in reg. formula
th2 = Theta2;
th2(:,1) = 0;
t1 = th1.^2;
t2 = th2.^2;
th = sum(sum(t1)) + sum(sum(t2));
th = lambda * th / (2*m);
J = J + th; %regularization
del_3 = a3 - Y;
t1 = del_3'*a2;
Theta2_grad = 2*(t1)/m + lambda*th2/m;
t1 = del_3 * Theta2;
del_2 = t1 .* a2;
del_2 = del_2(:,2:end);
t1 = del_2'*a1;
Theta1_grad = 2*(t1)/m + lambda*th1/m;
grad = [Theta1_grad(:) ; Theta2_grad(:)];
end
Dann benutze ich diese Funk infmincg Algorithmus, aber in ersten Iterationen fmincg Ende ist es Arbeit. Ich denke mein Gefälle ist falsch, aber ich kann den Fehler nicht finden.
Kann jemand helfen?