前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Python深度学习入门]实战一·Numpy梯度下降求最小值

[Python深度学习入门]实战一·Numpy梯度下降求最小值

作者头像
小宋是呢
发布2019-06-27 14:51:50
6290
发布2019-06-27 14:51:50
举报
文章被收录于专栏:深度应用深度应用

[深度学习入门]实战一·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()
  • 运行结果:

log:

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]

图片

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年11月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • [深度学习入门]实战一·Numpy梯度下降求最小值
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档