numpy计算梯度,python sklearn 梯度下降法

  numpy计算梯度,python sklearn 梯度下降法

  有些小伙伴不会解决numpy梯度最小值减小的问题。今天,边肖将带你去看一看。

  描述:求解y1=xx-2x3 0.01 *(从-1到1的随机值)和y2=0之间的最小距离点(x,y)。

  给定x范围(0,3)

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

  功能图像是:

  p style="white-space: pre-wrap; line-height: 1.75em;">

  

  


  

代码内容:

  


  

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学习网教学中心(推荐操作系统:windows7系统、Python 3.9.1,DELL G3电脑。)

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: