Python中如何用numpy解决梯度下降最小值

python

有的小伙伴不会解决numpy梯度下降最小值的问题,今天小编就来带大家一起看看吧。

问题描述:求解y1 = xx -2 x +3 + 0.01*(-1到1的随机值) 与 y2 = 0 的最小距离点(x,y)

给定x范围(0,3)

不使用学习框架,手动编写梯度下降公式求解,提示:x = x - alp*(y1-y2)导数(alp为学习率)


函数图像为:



代码内容:


import numpy as np

import matplotlib.pyplot as plt

def get_loss(x):

   c,r = x.shape

   loss = (x**2 - 2*x + 3) + (0.01*(2*np.random.rand(c,r)-1))

   return(loss)

x = np.arange(0,3,0.01).reshape(-1,1)

"""plt.title("loss")

plt.plot(get_loss(np.array(x)))

plt.show()"""

def get_grad(x):

   grad = 2 * x -2

   return(grad)

np.random.seed(31415)

x_ = np.random.rand(1)*3

x_s = []

alp = 0.001

print("X0",x_)

for e in range(2000):

   x_ = x_ - alp*(get_grad(x_))

   x_s.append(x_)

   if(e%100 == 0):

       print(e,"steps,x_ = ",x_)

plt.title("loss")

plt.plot(get_loss(np.array(x_s)))

plt.show()


运行结果:


X0 [1.93745582]

0 steps,x_ =  [1.93558091]

100 steps,x_ =  [1.76583547]

200 steps,x_ =  [1.6268875]

300 steps,x_ =  [1.51314929]

400 steps,x_ =  [1.42004698]

500 steps,x_ =  [1.34383651]

600 steps,x_ =  [1.28145316]

700 steps,x_ =  [1.23038821]

800 steps,x_ =  [1.18858814]

900 steps,x_ =  [1.15437199]

1000 steps,x_ =  [1.12636379]

1100 steps,x_ =  [1.1034372]

1200 steps,x_ =  [1.08467026]

1300 steps,x_ =  [1.06930826]

1400 steps,x_ =  [1.05673344]

1500 steps,x_ =  [1.04644011]

1600 steps,x_ =  [1.03801434]

1700 steps,x_ =  [1.03111727]

1800 steps,x_ =  [1.02547157]

1900 steps,x_ =  [1.02085018]

图片


今天的numpy解决梯度下降最小值的讲解到这里就结束了。更多Python学习推荐:云海天Python教程网。                                            

以上是 Python中如何用numpy解决梯度下降最小值 的全部内容, 来源链接: utcz.com/z/529701.html

回到顶部