在python中进行逻辑回归的负对数似然成本和相对于w,bF的梯度损失

问题描述 投票:-1回答:1

查找成本函数的公式:

Cost Function

计算w,b的梯度损失的公式:

Gradient Loss

参数:

  1. w-权重,一个大小为(num_px * num_px * 3,1)的numpy数组
  2. b-偏差,标量
  3. X-大小的数据(num_px * num_px * 3,示例数)
  4. Y-真正的“标签”向量(大小为1,示例数为0,如果为非cat,则为1);>
  5. 返回:

  1. 成本-逻辑回归的对数似然成本的负数

  2. dw-相对于w的损耗梯度,因此与w的形状相同

  3. db-相对于b的损耗梯度,因此形状与b

  4. ] >>

    我的代码:

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 * ...

python logistic-regression backpropagation
1个回答
0
投票
dw = np.dot(X,db.T)/m 

是错误的。

© www.soinside.com 2019 - 2024. All rights reserved.