代码未融合香草渐变下降

时间:2016-09-25 02:07:34

标签: python machine-learning gradient-descent

我有一个特定的分析梯度,用于计算我的成本f(x,y)和渐变dx和dy。它运行,但我不知道我的梯度下降是否被打破。我应该绘制我的偏导数x和y吗?

import math

gamma = 0.00001 # learning rate
iterations = 10000 #steps
theta = np.array([0,5]) #starting value
thetas = []
costs = []

# calculate cost of any point
def cost(theta):
    x = theta[0]
    y = theta[1]
    return 100*x*math.exp(-0.5*x*x+0.5*x-0.5*y*y-y+math.pi)

def gradient(theta):
    x = theta[0]
    y = theta[1]
    dx = 100*math.exp(-0.5*x*x+0.5*x-0.0035*y*y-y+math.pi)*(1+x*(-x + 0.5))
    dy = 100*x*math.exp(-0.5*x*x+0.5*x-0.05*y*y-y+math.pi)*(-y-1)
    gradients = np.array([dx,dy])
    return gradients

#for 2 features
for step in range(iterations):
    theta = theta - gamma*gradient(theta)
    value = cost(theta)
    thetas.append(theta)
    costs.append(value)

thetas = np.array(thetas)
X = thetas[:,0]
Y = thetas[:,1]
Z = np.array(costs)

iterations = [num for num in range(iterations)]

plt.plot(Z)
plt.xlabel("num. iteration")
plt.ylabel("cost")

1 个答案:

答案 0 :(得分:2)

我强烈建议您首先根据数值渐变对其进行评估,以检查分析梯度是否正常工作。 I.e确保你的f'(x)=(f(x + h) - f(x))/ h为一些小h。

之后,通过选择一个知道x或y应该减小的点然后检查渐变函数输出的符号,确保您的更新实际上是正确的方向。

当然要确保你的目标实际上是最小化与最大化。