Pytorch试水 梯度下降法实现线性回归

it2025-03-18  12

import torch as t from torch.autograd import Variable as V from matplotlib import pyplot as plt #随机数种子 t.manual_seed(1000) def get_fake_data(batch_size=8): '''产生随即数据y=2x+3,并添加噪声''' x=t.rand(batch_size,1)*20 y=2*x+(1+t.randn(batch_size,1))*3 return x,y x,y=get_fake_data() #plt.scatter(x.squeeze().numpy(),y.squeeze().numpy()) #初始化w,b w=V(t.rand(1,1),requires_grad=True) b=V(t.zeros(1,1),requires_grad=True) #学习率 lr=0.001 for i in range(8000): x,y=get_fake_data() x,y=V(x),V(y) #前向传播,mm为矩阵乘法 y_pred=x.mm(w)+b.expand_as(y) loss=0.5*(y_pred-y)**2 loss=loss.sum() #反向传播 loss.backward() #梯度下降法更新参数 w.data.sub_(lr*w.grad.data) b.data.sub_(lr*b.grad.data) #梯度清零 w.grad.data.zero_() b.grad.data.zero_() #绘图 xx=t.range(0,20).view(-1,1) yy=xx.mm(w.data)+b.data.expand_as(xx) plt.plot(xx.numpy(),yy.numpy()) x2,y2=get_fake_data(batch_size=20) plt.scatter(x2.numpy(),y2.numpy()) plt.xlim(0,20) plt.ylim(0,41) plt.show()

截图如下:

 

 

 

 

最新回复(0)