Neural network 如何将深度学习梯度下降方程转换为python

Neural network 如何将深度学习梯度下降方程转换为python,neural-network,deep-learning,backpropagation,gradient-descent,propagation,Neural Network,Deep Learning,Backpropagation,Gradient Descent,Propagation,我一直在关注一个关于深度学习的在线教程。它有一个关于梯度下降和成本计算的实际问题,在转换成python代码后,我一直在努力获得给定的答案。希望你能帮我得到正确的答案 有关使用的方程式,请参见以下链接 以下是用于计算梯度下降、成本等的函数。需要在不使用for循环的情况下找到值,而使用矩阵操作 import numpy as np def propagate(w, b, X, Y): """ Arguments: w -- weights, a numpy array of size (num_

我一直在关注一个关于深度学习的在线教程。它有一个关于梯度下降和成本计算的实际问题,在转换成python代码后,我一直在努力获得给定的答案。希望你能帮我得到正确的答案

有关使用的方程式,请参见以下链接

以下是用于计算梯度下降、成本等的函数。需要在不使用for循环的情况下找到值,而使用矩阵操作

import numpy as np

def propagate(w, b, X, Y):
"""
Arguments:
w -- weights, a numpy array of size (num_px * num_px * 3, 1)
b -- bias, a scalar
X -- data of size (num_px * num_px * 3, number of examples)
Y -- true "label" vector (containing 0 if non-cat, 1 if cat) of size
  (1, number of examples)

Return:
cost -- negative log-likelihood cost for logistic regression
dw -- gradient of the loss with respect to w, thus same shape as w
db -- gradient of the loss with respect to b, thus same shape as b

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 =                                      # compute activation
cost =                                   # compute cost
### END CODE HERE ###


# BACKWARD PROPAGATION (TO FIND GRAD)
### START CODE HERE ### (≈ 2 lines of code)
dw = 
db = 
### 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],[3,4]]), 
np.array([[1,0]])
grads, cost = propagate(w, b, X, Y)
print ("dw = " + str(grads["dw"]))
print ("db = " + str(grads["db"]))
print ("cost = " + str(cost))
以下是上述项目的预期产出

Expected Output:
dw  [[ 0.99993216] [ 1.99980262]]
db  0.499935230625
cost    6.000064773192205
对于上面的propagate函数,我使用了下面的替换,但是输出不是预期的。请就如何获得预期输出提供帮助

A = sigmoid(X)
cost = -1*((np.sum(np.dot(Y,np.log(A))+np.dot((1-Y),(np.log(1-A))),axis=0))/m)
dw = (np.dot(X,((A-Y).T)))/m
db = np.sum((A-Y),axis=0)/m
以下是用于计算激活的sigmoid函数:

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 = 1 / (1+np.exp(-z))
  ### END CODE HERE ###

return s

希望有人能帮助我理解如何解决这个问题,因为如果不理解这个问题,我就无法继续学习剩下的教程。非常感谢

经过几次代码和注释后,终于能够找出错误

首先需要计算Z,然后将其传递给sigmoid函数,而不是X

Z=wTX+b的公式。因此,在python中,其计算如下

Z=np.dot(w.T,X)+b
dw=np.dot(X,(A-Y).T)/m
然后通过将z传递给sigmoid函数来计算A

A = sigmoid(Z)
然后,可以按以下公式计算dw

Z=np.dot(w.T,X)+b
dw=np.dot(X,(A-Y).T)/m
其他变量的计算;b的成本和衍生工具如下

cost = -1*((np.sum((Y*np.log(A))+((1-Y)*(np.log(1-A))),axis=1))/m) 
db = np.sum((A-Y),axis=1)/m

在对代码和注释进行了几次检查之后,终于能够找出错误

首先需要计算Z,然后将其传递给sigmoid函数,而不是X

Z=wTX+b的公式。因此,在python中,其计算如下

Z=np.dot(w.T,X)+b
dw=np.dot(X,(A-Y).T)/m
然后通过将z传递给sigmoid函数来计算A

A = sigmoid(Z)
然后,可以按以下公式计算dw

Z=np.dot(w.T,X)+b
dw=np.dot(X,(A-Y).T)/m
其他变量的计算;b的成本和衍生工具如下

cost = -1*((np.sum((Y*np.log(A))+((1-Y)*(np.log(1-A))),axis=1))/m) 
db = np.sum((A-Y),axis=1)/m
看起来你已经在做背道具了。我只是想帮你简化一些前进道具


看起来你已经在做背道具了。我只是想帮你简化一些前进道具。

你可以计算A、cost、dw、db如下:

A = sigmoid(np.dot(w.T,X) + b)     
cost = -1 / m * np.sum(Y*np.log(A)+(1-Y)*np.log(1-A)) 

dw = 1/m * np.dot(X,(A-Y).T)
db = 1/m * np.sum(A-Y)
其中,乙状结肠是:

def sigmoid(z):
    s = 1 / (1 + np.exp(-z))    
    return s

您可以按以下公式计算A、cost、dw、db:

A = sigmoid(np.dot(w.T,X) + b)     
cost = -1 / m * np.sum(Y*np.log(A)+(1-Y)*np.log(1-A)) 

dw = 1/m * np.dot(X,(A-Y).T)
db = 1/m * np.sum(A-Y)
其中,乙状结肠是:

def sigmoid(z):
    s = 1 / (1 + np.exp(-z))    
    return s

sigmoid:1/1+np.exp-x注意:在sigmoid函数外有返回s,Python在函数def下使用选项卡行表示它们属于函数。sigmoid的导数:sigmoidx*1-sigmoidx您可以通过注意输出已经被sigmoid化来加速sigmoidx:dsigomoid=output*1-output在任何情况下,这是您可以使用的激活函数之一。看来你和其他人都在正确的轨道上。你说的成本是错误吗?您可以从目标sample.sigmoid:1/1+np.exp-x中减去输出。注意:您的sigmoid函数外有返回s。Python使用函数def下的选项卡行指示它们属于函数。sigmoid的导数:sigmoidx*1-sigmoidx您可以通过注意输出已经被sigmoid化来加速sigmoidx:dsigomoid=output*1-output在任何情况下,这是您可以使用的激活函数之一。看来你和其他人都在正确的轨道上。你说的成本是错误吗?您可以从目标示例中减去输出。谢谢Rob,我现在似乎在标记代码方面遇到了问题。有什么变化吗?谢谢Rob,我现在似乎在标记代码方面有问题。有什么变化吗?