簡體   English   中英

Python中的梯度下降方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM