pytorch构建线性回归模型

发布于:2025-03-25 ⋅ 阅读:(18) ⋅ 点赞:(0)

仅仅用于自己记录pytorch学习记录

线性回归模型
(1)准备数据集
数据:三个数据x=[x1,x2,x3] y=[y1,y2,y3]
在这里插入图片描述

import torch
#线性回归,我们使用三组数据,分别是(1,2),(2,4),(3,6)
x_data = torch.tensor([[1.0],[2.0],[3.0]])
y_data = torch.tensor([[2.0],[4.0],[6.0]])

(2)设计模块
所有模块都是继承与nn.moudle类别
在这里插入图片描述
在这里插入图片描述
关于nn.Linear()用法,可以参考这个篇文章,因为我们输入神经元的个数为1(即一个点的x轴坐标),输出神经元个数也是1(wx+b的值)
用法参考
我们自己定义有个线性回归类,这个类继承于torch.nn.module这个类类别必须要重载init函数和forward函数,一个负责类的初始化(相当于构造),一个负责前向传播super().init()必须要有的。

class LinearModel(torch.nn.Module):
    def __init__(self):
        #调用父类的构造__init__()
        super(LinearModel,self).__init__()
        #构造对象,linear是Linear()的实例化对象,帮我们完成wx+b的计算
        #输入神经元1个,输出神经元也是1个,输入一个点的x轴坐标,输出一个wx+b的预测值y
        self.linear =torch.nn.Linear(1,1)
    def forward(self,x):
        #一个初始化类带参数,表明其是callbale的,即__callable__()
        y_pred=self.linear(x)
        return y_pred    

在这里插入图片描述

(3)建立损失和优化器
在这里插入图片描述

#实例化自己的模型
model =LinearModel()
#构建定义损失函数
criterion =torch.nn.MSELoss(size_average =False)
#构建定义优化器,使用SGD下降
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)

(4)开始训练

在这里插入图片描述
其中step函数是用来更新

#构建定义优化器,使用SGD下降
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)
for epoch in range(100):
    #先算预测值
    y_pred=model(x_data)
    #计算损失
    loss=criterion(y_pred,x_data) 
    print(epoch,loss.item())
    #梯度回0,pytorch里面必须要有的步骤
    optimizer.zero_grad()
    #权重传播
    loss.backward()
    #更新
    optimizer.step()

(5)打印结果展示
在这里插入图片描述

#linear里面的权重w和偏置b打印出来,必须要有这个函数
print("w= ",model.linear.weight.item())
print("w= ",model.linear.bias.item())

(6)测试模型
在这里插入图片描述

#数据测试
x_test=torch.tensor([4.0])
y_test=model(x_test)
#取出训练好的预测值
print(y_test.data)

大家也可以试一试其他的优化器
在这里插入图片描述

全部代码

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):
        #调用父类的构造__init__()
        super(LinearModel,self).__init__()
        #构造对象,linear是Linear()的实例化对象,帮我们完成wx+b的计算
        #输入神经元1个,输出神经元也是1个,输入一个点的x轴坐标,输出一个wx+b的预测值y
        self.linear =torch.nn.Linear(1,1)
    def forward(self,x):
        #一个初始化类带参数,表明其是callbale的,即__callable__()
        y_pred=self.linear(x)
        return y_pred
#实例化自己的模型
model =LinearModel()
#构建定义损失函数
criterion =torch.nn.MSELoss(size_average =False)
#构建定义优化器,使用SGD下降
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)
for epoch in range(100):
    #先算预测值
    y_pred=model(x_data)
    #计算损失
    loss=criterion(y_pred,x_data) 
    print(epoch,loss.item())
    #梯度回0,pytorch里面必须要有的步骤
    optimizer.zero_grad()
    #权重传播
    loss.backward()
    #更新
    optimizer.step()
#linear里面的权重w和偏置b打印出来,必须要有这个函数
print("w= ",model.linear.weight.item())
print("w= ",model.linear.bias.item())

#数据测试
x_test=torch.tensor([4.0])
y_test=model(x_test)
#取出训练好的预测值
print(y_test.data)

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到