Python中的梯度下降方法

时间:2018-01-18 05:00:28

标签: python optimization gradient-descent

所以我在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和epsil,我也没有接近最小值。

有人可以指出问题是什么吗?

干杯。

1 个答案:

答案 0 :(得分:0)

只有当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中的缩进非常重要。在这里,您的while循环永远不会运行多次,因为最后的return语句和steepd或多或少只是a - alpha*t(a)。您需要正确缩进代码的return语句,以便按照您希望的方式运行。