3 개의 레이어 (1 개의 입력, 1 개의 숨겨진 레이어와 1 개의 출력 레이어가 연속 된 결과)가있는 회귀 NN을 구현하려고합니다.신경망을 사용한 연속 회귀의 기울기
이내 nnCostFunction 지금 :
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
회귀 문제 (그리고 분류 하나)에 맞게 할 수 있도록 기초로서 나는 비용 함수 및 그라데이션 계산을
coursera.org 클래스에서 분류 NN 걸렸지 만 변경
그럼이 함수를 fmincg 알고리즘으로 사용합니다.하지만 처음에는 fmincg 반복 작업을 끝냅니다. 내 그라디언트가 잘못되었다고 생각하지만 오류를 찾을 수 없습니다.
아무도 도와 줄 수 있습니까? 만약 내가 제대로 이해하고
안녕하세요. Mikhail, 1 년 전의 질문 이었지만 아직이 문제를 해결했는지 궁금합니다. 실제로 다른 사람이 같은 것을 물었고 Andrew Ng의 checkNNGradients (lambda)와 비교하여 1e-4 상대 차이를 얻었습니다. http://stackoverflow.com/questions/20648422/neural-networks-sigmoid- 활성화 기능을위한 연속 출력 변수/20650561 # 20650561이 문제를 이미 해결했고 상대적인 차이가 더 적 으면 자신의 질문에 대답하여 업데이트하십시오. 그렇지 않으면 잘하면 내 코드가 도움이됩니다. 감사합니다 – lennon310
어떤 언어입니까? 그것은 옥타브/matlab (교수님이 가르친 것입니다 ..) – javadba
@javadba, 그것은 옥타브 –