一元线性回归模型
一、求解步骤
1.确定模型
2.选择损失函数 MES
3.求解梯度并更新w,b
w = w - LR * w.grade
b = b - LR * b.grade
二、代码实现
#一元线性回归模型
import torch
import matplotlib.pyplot as plt
torch.manual_seed(10)
lr=0.05 #学习率
#创建训练数据
x = torch.rand(20,1)*10
y = 2*x+(5+torch.randn(20,1))#加上随机噪声
#构建线性回归参数
w = torch.randn((1),requires_grad=True)
b = torch.zeros((1),requires_grad=True)
for iteration in range(1000):
# 前向传播
wx = torch.mul(w,x)
y_pred = torch.add(wx,b)
#计算 MSE loss
loss=(0.5*(y-y_pred)**2).mean()
# 反向传播
loss.backward()
# 更新参数
b.data.sub_(lr*b.grad)
w.data.sub_(lr * w.grad)
#清零张量的梯度
w.grad.zero_()
b.grad.zero_()
#绘图
if iteration %20 ==0 :
plt.scatter(x.data.numpy(),y.data.numpy())
plt.plot(x.data.numpy(),y_pred.data.numpy(),'r-',lw=5)
plt.text(2,20,'Loss=%.4f' % loss.data.numpy(),fontdict={'size':20,'color':'red'})
plt.xlim(1.5,10)
plt.ylim(8,28)
plt.title("Iteration:{}\nw:{} b:{}".format(iteration,w.data.numpy(),b.data.numpy()))
plt.pause(0.5)
if loss.data.numpy() <1:
break