In Week 5, the job requires supervised learning (suoervised learning) to recognize Arabic numerals through a neural network (NN) for multi-classification logistic regression (multi-class logistic REGRESSION). The main purpose of the job is to feel how to find the cost function in the NN and the derivative value of each parameter (THETA) in its hypothetical function (GRADIENT derivative) (using backpropaggation).
The difficulty is not high, but the problem is that you have to get used to the Malab matrix Qaq, as a konjac konjac, I've got the dog. The code of the following generation core section wants to give some help to the students who are stuck in the job. But please don't copy the code OH ~ No ~ no ~
1Ty =zeros (m, num_labels);2 3 forI=1: M4 forj=1: Num_labels5 ifY (i) = =J6Ty (i,j) =1;7 End8 End9 EndTen OneA1 =X; Aa1 = [Ones (size (A1,1),1) A1]; -z2 = A1 * Theta1'; -A2 =sigmoid (z2); theA2 = [Ones (size (A2,1),1) A2]; -z3 = A2 * Theta2'; -A3 =sigmoid (Z3); - + - forI=1: M + forj=1: Num_labels AJ = J-log (1-A3 (I,J)) * (1-ty (I,J))/m-log (A3 (I,j)) *ty (I,J)/m; at End - End - -%size (J,1) -%size (J,2) - ind3 = A3-Ty; -D2 = (D3 * THETA2 (:,2: End)). *sigmoidgradient (z2); toTheta1_grad = Theta1_grad + d2'*a1/m; +Theta2_grad = Theta2_grad + d3'*a2/m; - the% ------------------------------------------------------------- *jj=0; $ Panax Notoginseng forI=1: Size (Theta1,1) - forj=2: Size (Theta1,2) theJJ = JJ + Theta1 (i,j) *theta1 (i,j) *lambda/(m*2); + End A End theSize (Theta1,1); +Size (Theta1,2); - $ forI=1: Size (THETA2,1) $ forj=2: Size (THETA2,2) -JJ = JJ + Theta2 (i,j) *theta2 (i,j) *lambda/(2*m); - End the End -Size (THETA2,1);WuyiSize (THETA2,2); the%J = J + (lambda/(2*M)) * (Theta1 (:,2: End). *THETA1 (:,2: End) +theta2 (2: End,:). *THETA2 (2: End,:)); -J =j+JJ; Wu -Theta1_gradd =Zeros (Size (Theta1)); AboutTheta2_gradd =Zeros (Size (THETA2)); $ - forI=2: Size (Theta1,2) - forj=1: Size (Theta1,1) -Theta1_gradd (j,i) = Theta1 (j,i) *lambda/m; A End + End the - forI=2: Size (THETA2,2) $ forj=1: Size (THETA2,1) theTheta2_gradd (j,i) = Theta2 (j,i) *lambda/m; the End the End the -Theta1_grad = theta1_gradd+Theta1_grad; inTheta2_grad = Theta2_gradd+theta2_grad;
PS: Bo Master konjac konjac force himself next time to write matrix operations, can not set cycle!!!
Neural Network jobs: NN Learning Coursera machine learning (Andrew Ng) WEEK 5