pytorch——线性回归实现

        我们使用一个自定义的数据,来使用torch实现一个简单的线性回归。假设我们的基础模型就是y=wx+b,其中,w,b是参数,我们使用y=3x+0.8来构造数据xy,所以最后通过模型应该能够得出的w,b应该是分别接近3和0.8。

1、准备数据

        根据y=3x+0.8创建函数

x = torch.rand([500,1])#创建一个500行1列的数据
y_true = x * 3 + 0.8

2、通过模型构建y_predict

        因为需要反向计算梯度,所以将requires_grad设置为True

w = torch.rand([1,1],requires_grad = True)
b = torch.tensor(0,requires_grad = True)
y_predict = torch.matmul(x,w) + b

3、计算loss

loss = (y_true - y_predict).pow(2).mean()

4、通过循环,反向传播,更新参数

        因为每一次计算,都应算出y_predict和loss,所以应该将其放进for循环中。

for i in range(5000):#不能直接用int进行迭代,而必须加个range 
    y_predict = torch.matmul(x,w) + b
    loss = (y_true - y_predict).pow(2).mean()

    if w.grad is not None:#w.grad是累加值,所以应该先判断是否有值
        w.data.zero_()#_表示就地修改。
    if b.grad is not None:
        b.data.zero_()

    loss.backward()
    w.data = w.data - learning_rate * w.grad
    b.data = b.data - learning_rate * b.grad
    print("w,b,loss",w.item(),b.item(),loss.item())

5、运行结果

pytorch——线性回归实现_第1张图片

        如果想要结果更加可视化,则可以引入matplotlib.pyplot。

import matplotlib.pyplot as plt

plt.figure(figsize = (10,4))
plt.scatter(x.numpy().reshape(-1),y_true.numpy().reshape(-1))#画散点图,resahpe(-1)用来转换为一阶
y_predict = torch.matmul(x,w) + b
plt.plot(x.numpy().reshape(-1),y_predict.detach().numpy().reshape(-1),c = 'r')#因为y_predict中会含有grad一些所以detach,c表示颜色color
plt.show()

pytorch——线性回归实现_第2张图片

 

你可能感兴趣的:(Python,机器学习,python,深度学习)