【PyTorch深度学习实践】-- 用PyTorch实现线性回归

学习视频:B站 刘二大人《PyTorch深度学习实践》完结合集

四、用PyTorch实现线性回归

1. 用pytorch实现:(训练过程)

  • 准备数据集
  • 设计模型
  • 计算loss和优化
  • 训练周期

image-20230227095832126

2. 构造函数

image-20230228211019386

  • 在pytorch的__ call __语句里面有一个重要的就是forward()。

  • Module实现了魔法函数__ call __(),call()里面有一条语句是要调用forward()。因此新写的类中需要重写forward()覆盖掉父类中的forward()。

  • 所以我们在自己的moudle里面必须是实现forward。

image-20230228211222795

3. 损失函数

image-20230228211249057

4. 优化器

image-20230228211341571

优化器不会构建计算图。
第一个参数:params代表的是权重。

优化器可以对模型里面的所有权重进行更新,上述的模型包括w和b。

具体可参照pytorch官网

5. 完整代码

image-20230227102940709

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): #继承nn.Module
    def __init__(self):
        super(LinearModel,self).__init__() #调用父类的构造
        self.linear = torch.nn.Linear(1,1) #torch.nn.Linear是torch中的一个类,torch.nn.Linear(1,1)构造了一个对象,包括权重和偏置

    def forward(self,x):
        y_pred = self.linear(x) #实现了可调用的对象
        return y_pred

model = LinearModel()

#构造损失函数
criterion = torch.nn.MSELoss(size_average=False) #需要传入的参数为y_pred,y_data
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)

#训练的过程
for epoch in range(100):
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    print(epoch,loss.item())

    optimizer.zero_grad() #梯度归零
    loss.backward()
    optimizer.step() #梯度更新

#输出结果
print('w=','%.2f'%(model.linear.weight))
print("b=",'%.2f'%(model.linear.bias))

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

运行结果:

image-20230227103008434

参考资料

https://blog.csdn.net/lizhuangabby/article/details/125607166


版权声明:本文为qq_46656857原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。