[英]Method of Gradient Descent in Python
因此,我在python中運行一個用於梯度下降的簡單算法,試圖找到函數的最小值。
我的代碼相當簡單明了,我覺得它很直觀。 我嘗試了一個二階多項式的簡單示例。
def s(x):
return x**2
def t(x):
return 2*x
def steepd(a, alpha, epsilon):
b = a - alpha*t(a)
while abs(t(a)) > epsilon:
if t(b) ==0:
return b
else:
a = b
b = a - alpha*t(a)
return b
print(steepd(2,0.1,0.001))
x = np.arange(-10,10,0.01)
plt.plot(x,s(x))
plt.show()
但是,即使通過顯着改變alpha和ε,我也無法接近最小值。
有人可以指出問題所在嗎?
干杯。
僅當t(a)
在epsilon
零以內時,您的代碼才會終止,因此除非您的縮進被破壞(因為它在您的問題正文中)並且您的代碼看起來像這樣,否則它不會產生違反此約束的值:
def steepd(a, alpha, epsilon):
b = a - alpha*t(a)
while abs(t(a)) > epsilon:
if t(b) ==0:
return b
else:
a = b
b = a - alpha*t(a)
return b
Python中的縮進很重要。 在這里,由於結尾處的return
語句, while
循環永遠不會運行超過一次,並且steepd
或多或少只是a - alpha*t(a)
。 您需要正確縮進return
語句,以使代碼以所需的方式運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.