這是我的梯度下降代碼:
import numpy
def gradient_descent(func, grad_func, w_init, n_epochs=100, lr=0.001, verbose=0):
i = 0
w = w_init
while i < n_epochs:
delta_w = -lr * grad_func(w)
w = w delta_w
if verbose > 0:
print("f={}; w: {}".format(func(w), w))
i = 1
return w
現在向我解釋的示例具有簡單的功能,即:
f(p,q) = p^2 q^2. 部分導數在向量中:[2p,2q],這很清楚。該函式及其漸變的代碼是:
def f(w):
return numpy.sum(w*w)
def grad(w):
return 2*w
所以計算如下:
# starting point
w_init = numpy.array([10,10])
# learning rate
lr = 0.1
# apply gradient descent
w_opt = gradient_descent(f, grad, w_init, n_epochs=25, lr=lr, verbose=1)
我的問題是為另一個函式計算它,例如:f(p,q) = (p^2 2q^3). 我知道偏導數的值,但是如何將這些值實作到這個特定的代碼?如何為其撰寫新函式f和梯度函式grad并用 main 函式計算它?
uj5u.com熱心網友回復:
可能您正在尋找這樣的東西:
def f(w):
return w[0] ** 2 2 * w[1] ** 3
def grad(w):
return np.array([2 * w[0], 3 * w[1] ** 2])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/424832.html
