Pytorch实现线性回归模型

利用Pytorch实现线性回归模型主要步骤为:
(1)定义数据集,这里需要注意在Pytorch中使用的是mini-batch那么因此数据集是矩阵形式
(2)自定义模型类,在定义模型类的时候需要继承自torch.nn.Module类,同时需要提供构造方法重写forward函数
(3)构造Loss并且创建优化器,在Pytorch中可以使用多种优化器,具体如下:
torch.optim.Adagrad、torch.optim.Adam、torch.optim.Adamax、torch.optim.ASGD、torch.optim.LBFGS、torch.optim.RMSprop、torch.optim.Rprop、torch.optim.SGD.
(4)迭代训练,更新权重

实现线性模型需要注意的点:
(1)此次线性模型中使用torch.nn.Linear类来创建linear对象,在Linear类当中包括两个参数,weight(权重)和bias(偏置)。
(2)linear对象实现了call()方法,是可调用的,该对象当传入参数以后,会自动将参数用来求预测值。
(3)创建模型对象后直接传入训练数据,此时该对象也是callable的,会将参数直接传给forward函数进行计算。
(4)每次迭代时都需将梯度先归零,防止累加。

代码实现:

# -*- coding: utf-8 -*-
# @Time : 2022/1/25 14:03
# @Author : CH339
# @FileName: Test1_25_2.py
# @Software: PyCharm
# @Blog :https://blog.csdn.net/weixin_56068397/article/

"""
使用Pytorch实现线性回归
"""
import torch

# 定义数据集
# pytorch中使用的是mini-batch,那么这里的数据集都是矩阵
x_data = torch.Tensor([[1.0],[2.0],[3.0]])
y_data = torch.Tensor([[2.0],[4.0],[6.0]])

# 定义线性模型类
class Model(torch.nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        # 构造linear对象,Linear中包括两个参数是weight和bias
        self.linear = torch.nn.Linear(1,1)

    # 重写forward函数
    def forward(self,x):
        # linear对象是可调用的,那么传入参数后自动会读取参数
        y_pred = self.linear(x)
        return y_pred

# 创建模型对象,这个模型对象也是callable的,会自动将传入的参数传到forward函数当中进行计算
model = Model()

# 构造Loss和优化器
criterion = torch.nn.MSELoss(size_average=True)
# 优化器对象创建时需要传入参数,这里的参数取得是模型对象当中的w和bias
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=',epoch+1,loss.item())
    # 先进行梯度归零
    optimizer.zero_grad()
    # 进行反向传播
    loss.backward()
    # 进行权重更新
    optimizer.step()

# 经过100次迭代之后输出权重和偏置
print("Weight=",model.linear.weight.item())
print("Bias=",model.linear.bias.item())

# 通过测试集进行测试
x_test = torch.Tensor([[5.0]])
y_test = model(x_test)
print("结果",y_test.data)

当迭代次数为100次时:
在这里插入图片描述
由截图可知,当迭代100次时,损失较大,且预测值和真实值还有差距,说明此时参数还没有收敛,那么增加迭代次数;

当增加迭代次数为1000次时,此时观察结果较为接近(这里还可以增加迭代次数,观察合适损失值大致不变):
在这里插入图片描述

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值