Neural Networks: Learning
nnCostFunction:
a1 = [ones(m,1) X];
z2 = a1*Theta1';
a2 = sigmoid(z2);
m1 = size(a2,1);
a2 = [ones(m1,1) a2];
z3 = a2*Theta2';
a3 = sigmoid(z3);
%temp = log(a3);
for i=1:num_labels;
ynew(:,i) = y==i; %5000x10
end
J = 1/m*sum(sum(-ynew.*log(a3)-(1-ynew).*log(1-a3)))...
+lambda/(2*m)*(sum(sum(Theta1(1:hidden_layer_size,2:1+input_layer_size).^2)) ...
+ sum(sum(Theta2(1:num_labels,2:1+hidden_layer_size).^2)));
Delta1 = zeros(size(Theta1)); %25x401
Delta2 = zeros(size(Theta2)); %10x26
for i=1:m;
a1 = X(i,:); %a1 is 1x400
a1 =[1 a1]; %1x401
z2 = a1*Theta1';%1x25
a2 = sigmoid(z2);
m1 = size(a2,1);
a2 = [ones(m1,1) a2]; %1x26
z3 = a2*Theta2'; %1x10
a3 = sigmoid(z3); %1x10
delta_3 = a3 - ynew(i,:); %1x10
temp = delta_3*Theta2; %1x26
delta_2 = temp(2:end).*sigmoidGradient(z2); %1x25
Delta1 = Delta1 + delta_2'*a1;
Delta2 = Delta2 + delta_3'*a2;
end
m1 = size(Theta1,1);
m2 = size(Theta2,1);
Thet1 = [zeros(m1,1) Theta1(:,2:end)];
Thet2 = [zeros(m2,1) Theta2(:,2:end)];
Theta1_grad = Delta1/m +lambda/m*Thet1; %25x401
Theta2_grad = Delta2/m +lambda/m*Thet2; %10x26