Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function [J grad] = nnCostFunction(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);
- J = 0;
- Theta1_grad = zeros(size(Theta1));
- Theta2_grad = zeros(size(Theta2));
- X = [ones(m, 1) X];
- A = sigmoid(Theta1 * X');
- A = [ones(1, size(A, 2)); A];
- t = sigmoid(Theta2*A);
- J = (-1/m)*sum(sum(y'.*(log(t)) + ((1-y').*log(1-t)))) + (lambda/(2*m))*sum(sum(Theta1(:,2:end).^2)) + sum(sum(Theta2(:,2:end).^2));
- for i = 1:m
- a1 = X(i,:);
- a2 = sigmoid(Theta1 * a1');
- a2 = [ones(1, size(a2, 2)); a2];
- a3 = sigmoid(Theta2*a2);
- delta3 = a3-y(i);
- delta2 = (Theta2'*delta3).*(a2.*(1-a2));
- Theta1_grad = Theta1_grad + [delta2(2:end,:)]*a1;
- Theta2_grad = Theta2_grad + delta3*a2';
- end
- Theta1_grad = (1/m)*Theta1_grad + (lambda/m)*[zeros(size(Theta1,1),1), Theta1(:,2:end)];
- Theta2_grad = (1/m)*Theta2_grad + (lambda/m)*[zeros(size(Theta2,1),1), Theta2(:,2:end)];
- % Unroll gradients
- grad = [Theta1_grad(:) ; Theta2_grad(:)];
- end
Add Comment
Please, Sign In to add comment