Tôi đang cố gắng thực hiện một hồi quy NN có 3 lớp (1 đầu vào, 1 lớp ẩn và 1 đầu ra với kết quả liên tục). Là một cơ sở Tôi lấy một phân NN từ coursera.org lớp, nhưng đã thay đổi hàm chi phí và tính toán độ dốc để phù hợp với một vấn đề hồi quy (và không phải là một phân loại một):Gradient trong hồi quy liên tục sử dụng mạng nơron
nnCostFunction của tôi bây giờ là:
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
Sau đó, tôi sử dụng func này trong fmincg thuật toán, nhưng trong lần đầu tiên lặp lại fmincg kết thúc công việc của nó. Tôi nghĩ rằng gradient của tôi là sai, nhưng tôi không thể tìm thấy lỗi.
Ai đó có thể trợ giúp?
Xin chào Mikhail, đó là câu hỏi hơn 1 năm trước, nhưng tôi đã tự hỏi liệu bạn đã giải quyết được vấn đề này chưa? Trên thực tế một anh chàng khác hỏi cùng một, và tôi đã cung cấp mã của tôi ở đó, so với checkNNGradients của Andrew Ng (lambda) và thu được sự khác biệt tương đối 1e-4: http://stackoverflow.com/questions/20648422/neural-networks-sigmoid- kích hoạt-chức năng-cho-liên tục-đầu ra-biến/20650561 # 20650561 Nếu bạn đã giải quyết vấn đề này và thậm chí còn có sự khác biệt tương đối ít hơn, xin vui lòng cập nhật bằng cách trả lời câu hỏi của riêng bạn; nếu không hy vọng mã của tôi là hữu ích. Cảm ơn – lennon310
ngôn ngữ đó là gì ?? nó là * không * octave/matlab (đó là điều mà Giáo sư Ng đã dạy ..) – javadba
@javadba, nó là octave –