查找成本函数的公式:
计算w,b的梯度损失的公式:
参数:
返回:
成本-逻辑回归的对数似然成本的负数
dw-相对于w的损耗梯度,因此与w的形状相同
db-相对于b的损耗梯度,因此形状与b
我的代码:
import numpy as np def sigmoid(z): """ Compute the sigmoid of z Arguments: z -- A scalar or numpy array of any size. Return: s -- sigmoid(z) """ ### START CODE HERE ### (≈ 1 line of code) s = None s = 1 / (1 + np.exp(-z)) ### END CODE HERE ### return s # GRADED FUNCTION: propagate def propagate(w, b, X, Y): """ Implement the cost function and its gradient for the propagation explained above Tips: - Write your code step by step for the propagation. np.log(), np.dot() """ m = X.shape[1] # FORWARD PROPAGATION (FROM X TO COST) ### START CODE HERE ### (≈ 2 lines of code) A = None # compute activation cost = None # compute cost k = w * X + b A = sigmoid(k) cost = (-Y * np.log(A) - (1 - Y) * np.log(1 - A)).mean() / m ### END CODE HERE ### # BACKWARD PROPAGATION (TO FIND GRAD) ### START CODE HERE ### (≈ 2 lines of code) dw = None db = None db = np.subtract(A , Y) dw = np.dot(X,db.T)/m db = np.sum(db)/m ### END CODE HERE ### # assert(dw.shape == w.shape) # assert(db.dtype == float) # cost = np.squeeze(cost) # assert(cost.shape == ()) grads = {"dw": dw, "db": db} return grads, cost w, b, X, Y = np.array([[1.],[2.]]), 2., np.array([[1.,2.,-1.],[3.,4.,-3.2]]), np.array([[1,0,1]]) grads, cost = propagate(w, b, X, Y) print ("dw = " + str(grads["dw"])) print ("db = " + str(grads["db"])) print ("cost = " + str(cost))
我的输出:
dw = [[ 0.72851438 0.99581514] [ 1.5487967 2.38666712]] db = 0.225798060825 cost = 1.04403235316
预期输出:
dw = [[ 0.99845601] [ 2.39507239]] db = 0.00145557813678 cost = 5.801545319394553
有人可以告诉我为什么我的dw尺寸与预期的输出不同,并帮助找到成本函数吗?
用于查找成本函数的公式:用于计算w,b的梯度损失的公式:参数:w-权重,大小为(num_px * num_px * 3,1)的numpy数组b-偏差,标量X-数据大小(num_px * ...
dw = np.dot(X,db.T)/m
是错误的。