Gradient Deescent Demo(梯度下降)

李宏毅老师视频讲解 Regression:Case Study 中的Gradient Deescent Demo,供大家参考

// An highlighted block
var foo = 'bar';


import matplotlib.pyplot as plt
import numpy as np
# 以上import导入视频中demo没有出现,但为必要

# 数据
x_data = [338.,333.,328.,207.,226.,25.,179.,60.,208.,606.]
y_data = [640.,633.,619.,393.,428.,27.,193.,66.,226.,1591.]
# ydata = b + w * xdata

x = np.arange(-200,-100,1) #bias
y = np.arange(-5,5,0.1) #weight
Z = np.zeros((len(x), len(y)))
X, Y = np.meshgrid(x,y)
for i in range(len(x)):
    for j in range(len(y)):
        b = x[i]
        w = y[j]
        Z[j][i] = 0
        for n in range(len(x_data)):
            Z[j][i]=Z[j][i]+(y_data[n] - b - w*x_data[n])**2
        Z[j][i] = Z[j][i]/len(x_data)

# ydata = b + w * xdata
b = -120 # initial b
w = -4  # initial w
lr = 0.0000001 # learning rate
#lr=1  #Adagard中lr=1
iteration = 100000 # 迭代次数

# store initial values for plotting 
b_history = [b]
w_history = [w]

lr_b = 0
lr_w = 0

# Iterations
for i in range(iteration):
    b_grad = 0.0
    w_grad = 0.0
    for n in range(len(x_data)):
        b_grad = b_grad - 2.0*(y_data[n] - b - w*x_data[n])*1.0
        w_grad = w_grad - 2.0*(y_data[n] - b - w*x_data[n])*x_data[n]
      
   
    #update parameters
    b = b - lr * b_grad
    w = w - lr * w_grad
    
    # Adagard 
    #lr_b = lr_b + b_grad ** 2
    #lr_w = lr_w + w_grad ** 2
    #b = b - lr/np.sqrt(lr_b) * b_grad
    #w = w - lr/np.sqrt(lr_w) * w_grad

   #store parameters for plotting
    b_history.append(b)
    w_history.append(w)


# plot the figure
plt.contourf(x,y, Z, 50, alpha=0.5, cmap=plt.get_cmap('jet'))
plt.plot([-188.4], [2.67] ,'x', ms=12, markeredgewidth=3, color='orange')
plt.plot(b_history, w_history,'o-', ms=3, lw=1.5, color='black')
#xlim, ylim 表示横纵坐标轴
plt.xlim(-200,-100)
plt.ylim(-5,5)
plt.xlabel(r'$b$',fontsize=16)
plt.ylabel(r'$w$',fontsize=16)
plt.show()

当lr = 0.0000001时,即学习效率(learning rate)为0.0000001
[外链图片转存失败,源站可能有防盗链机制,建议将图片A(https://img-cAonvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5r2W57uZXQvNy83L0IvMV9yYMTYzY24tLmpwZw6033895(ttps1://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw)]
增大学习效率,当lr =0.000001时,即学习效率(learning rate)为0.000001,此时代码中为 lr = 0.0000001 # learning rate
在这里插入图片描述
再次增加,此时learning rate 过大,已经超出我们所设置的图像,此时代码中为 lr = 0.00001 # learning rate
在这里插入图片描述
最后,采用Adagard,代码中 # Adagard 那部分(#update parameters这部分隐去),此时,可以设置lr=1
在这里插入图片描述
That is all,Thank you!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值