Формула для определения функции стоимости:
Формула для расчета потери градиента для w, b:
Аргументы:
- w - веса, numpy массив размеров (num_px * num_px * 3, 1)
- b - смещение, скаляр
- X - данные размера (num_px * num_px * 3, количество примеров)
- Y - - истинный вектор «метки» (содержит 0, если не cat, 1, если cat) размера (1, количество примеров)
Return:
стоимость - отрицательное логарифмическое значение вероятности для логистики c регрессия
dw - градиент потерь по отношению к w, поэтому такая же форма, как и у w
дБ - градиент потерь относительно 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 не То же самое с ожидаемым выходом и помочь найти функцию стоимости?