Python numpy解决梯度下降最小值

834次阅读
没有评论

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

给定x范围(0,3)

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

函数图像为:

Python

代码内容:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

<p style="line-height: 1.75em;"><span style="font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px;">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(e0 == 0):

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

plt.title("loss")

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

plt.show()<br></span></p>

运行结果:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<p style="line-height: 1.75em;"><span style="font-family: 微软雅黑, "Microsoft YaHei"; font-size: 14px;">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]<br></span></p>

图片

Python

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:wuyou2021-06-07发表,共计1478字。
新手QQ群:570568346,欢迎进群讨论 Python51学习