Pytorch深度学习笔记 2--线性模型

发布于:2023-02-10 ⋅ 阅读:(606) ⋅ 点赞:(0)

前几天学习了梯度下降算法以及随机梯度下降算法,记录一下自己的理解。
梯度下降算法是求最小权重的一种方式,通过数学中求导的方法,在定义初始权重之后,通过定义合理的学习率,来保证每次下降的梯度,从而找到最小的权重。但该算法的局限在于可能碰到鞍点(及提前结束循环训练,找不到全局最优解,该点为局部最优),但事实是并没有过多的局部最优解。

附代码:

import matplotlib.pyplot as plt

x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]

w = 1 #预估初始权重为4
def forward(x):
    return x*w  #求预估值

def cost(xt,yt):  #求MSE
    cost = 0
    for x,y in zip(xt,yt):
        y_val = forward(x)#forward()函数中不能放如xt,因为此时xt已经通过for循环赋值给了x
        cost += (y_val - y)*(y_val - y)
    return cost/len(xt)  #通过len()函数来计算列表xt的长度,从而求MSE--平均平方误差

def gradient(xt,yt):  #创建grad函数,通过求导来确定是向左还是向右改变权重
    grad = 0
    for x,y in zip(xt,yt):
        grad += 2*x*(x*w - y)
    return grad/len(xt)

print('Predict(before) w=',4,forward(4))
mse_list = []
epoch_list = []
for epoch in range(100): #循环训练100次
    cost_val = cost(x_data,y_data)
    grad_val = gradient(x_data,y_data)  #求梯度
    w -= 0.01*grad_val   #0.01 学习率----更新
    mse_list.append(cost_val)
    epoch_list.append(epoch)
    print('Epoch:', epoch, 'w=', w,  'cost=', cost_val)
print('Predict(before) w=',4,forward(4))


plt.plot(epoch_list,mse_list)  #不能写成plt.plot = ()
plt.xlabel('times')
plt.ylabel('cost')
plt.show()

还是有很多细节上的错误,因为对于python没有很系统的学习过,只是零散的通过查找资料来结合以前学习过的C,C++来理解,像Matplotlib和numpy的的学习还需要多积累,需更加注意。


网站公告

今日签到

点亮在社区的每一天
去签到