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?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage