Mercurial > hg > tvii
diff tvii/logistic_regression.py @ 31:fa7a51df0d90
[logistic regression] test gradient descent
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Mon, 04 Sep 2017 12:37:45 -0700 |
parents | ae0c345ea09d |
children | 0f29b02f4806 |
line wrap: on
line diff
--- a/tvii/logistic_regression.py Mon Sep 04 12:04:58 2017 -0700 +++ b/tvii/logistic_regression.py Mon Sep 04 12:37:45 2017 -0700 @@ -81,3 +81,58 @@ A = sigmoid(np.dot(w.T, X) + b) cost = np.sum(Y*np.log(A) + (1 - Y)*np.log(1 - A)) return (-1./m)*cost + + +def optimize(w, b, X, Y, num_iterations, learning_rate, print_cost = False): + """ + This function optimizes w and b by running a gradient descent algorithm + + Arguments: + w -- weights, a numpy array of size (num_px * num_px * 3, 1) + b -- bias, a scalar + X -- data of shape (num_px * num_px * 3, number of examples) + Y -- true "label" vector (containing 0 if non-cat, 1 if cat), of shape (1, number of examples) + num_iterations -- number of iterations of the optimization loop + learning_rate -- learning rate of the gradient descent update rule + print_cost -- True to print the loss every 100 steps + + Returns: + params -- dictionary containing the weights w and bias b + grads -- dictionary containing the gradients of the weights and bias with respect to the cost function + costs -- list of all the costs computed during the optimization, this will be used to plot the learning curve. + + Tips: + You basically need to write down two steps and iterate through them: + 1) Calculate the cost and the gradient for the current parameters. Use propagate(). + 2) Update the parameters using gradient descent rule for w and b. + """ + + costs = [] + + for i in range(num_iterations): + + # Cost and gradient calculation + grads, cost = propagate(w, b, X, Y) + + # Retrieve derivatives from grads + dw = grads["dw"] + db = grads["db"] + + # gradient descent + w = w - learning_rate*dw + b = b - learning_rate*db + + # Record the costs + if i % 100 == 0: + costs.append(cost) + + # Print the cost every 100 training examples + if print_cost and not (i % 100): + print ("Cost after iteration %i: %f" %(i, cost)) + + # package data for return + params = {"w": w, + "b": b} + grads = {"dw": dw, + "db": db} + return params, grads, costs