Angrew Machine Learning ex4

sigmoidGradient.m

t = sigmoid(z);
g = t .* (1 .- t);

randInitializeWeights.m

% Randomly initialize the weights to small values
epsilon_init = 0.12;
W = rand(L_out, 1 + L_in) * 2 * epsilon_init - epsilon_init;

nnCostFunction.m

%=========================== forward propgation =========
X = [ones(m, 1) X];
z1 = X * Theta1';
a1 = sigmoid(z1);
a1 = [ones(m, 1) a1]; %5000 X 26
z2 = a1 * Theta2';
h = sigmoid(z2);     %h equals to a2
%=========================== end of forward propgation===
log_h = log(h);
log_1_h = log(1 - h);
delta_3 = h; %5000 X 10
%y contains of the answer instead of the vector
%We execute the mapping here. 
for i = 1:m
  temp = log_1_h(i, :);
  temp(y(i)) = log_h(i, y(i));
  delta_3(i, y(i)) = h(i, y(i)) - 1;
  J += sum(temp);
end
%The bias units don't take part in the computation of delta
delta_2 = delta_3 * Theta2(:,2 : hidden_layer_size + 1) .* sigmoidGradient(z1); %5000 X 25
Theta1(:, 1) = 0; %Close bias unit
Theta2(:, 1) = 0;
J -= (sum(sum(Theta1 .^ 2)) + sum(sum(Theta2 .^ 2))) * lambda / 2;
J = - J /m;
%=========================== back propgation==============
Theta2_grad = (delta_3' * a1 + lambda * Theta2) / m;
Theta1_grad = (delta_2' * X + lambda * Theta1) / m;

猜你喜欢

转载自blog.csdn.net/ti_an_di/article/details/81079129
今日推荐