欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pytorch入门——线性回归

程序员文章站 2022-06-11 22:50:17
...

前言

b站刘洪普老师的pytorch入门课笔记。记录学习。
本文内容为线性回归示例。

方法

首先给出一个输入数据,我们的算法会通过一系列的过程得到一个估计的函数,这个函数有能力对没有见过的新数据给出一个新的估计,也被称为构建一个模型。 我们的线性回归模型是y= w*x + b。通过这个模型,我们对测试值x = 4.0 预测它的y值。

jupyter record

无需人工求梯度下降的导数,直接应用pytorch中的方法构造计算图即可。
1、module
所有的类都要继承于神经网络的基类nn.Module
2、loss
3、sgd optimizer

训练过程为前馈,反馈,更新。

import matplotlib as plt
import torch

x_data = torch.Tensor([[1.0],[2.0],[3.0]])
y_data = torch.Tensor([[2.0],[4.0],[6.0]])

class LinearModel(torch.nn.Module):
    def __init__(self):#构造函数
        super(LinearModel,self).__init__()
        self.linear = torch.nn.Linear(1,1)#构造包含权重和偏置b的对象,完成wx+b的计算
    
    def forward(self,x):#forward() for __call__()
        y_pred = self.linear(x)
        return y_pred
    
model = LinearModel()

criterion = torch.nn.MSELoss(size_average = False)#使用y^和y计算损失,False表示非1/N
optimizer = torch.optim.SGD(model.parameters(),lr = 0.01)#计算所有的参数,学习率为0.01

for epoch in range(1000):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    print(epoch,loss.item())
    
    optimizer.zero_grad()#梯度归0
    loss.backward()#反向传播
    optimizer.step()#梯度更新
    
print('w = ',model.linear.weight.item())
print('b = ',model.linear.bias.item())

x_test = torch.Tensor([[4.0]])
y_test = model(x_test)
print('y_pred = ',y_test.data)

0 12.930440902709961
1 6.04423713684082
2 2.974557399749756
3 1.6039438247680664
4 0.9897644519805908
5 0.7123865485191345
6 0.5850000381469727
7 0.524441659450531
8 0.4936887323856354
9 0.47625845670700073

996 2.9163902581785806e-07
997 2.87477632809896e-07
998 2.833462531270925e-07
999 2.7936749802393024e-07
w = 1.9996482133865356
b = 0.0007997381035238504
y_pred = tensor([[7.9994]])

参考

关于mini-batch