pytorch——API实现线性回归

        在pytorch中预设了一些更加灵活简单的对象,让我们来构造模型、定义损失、优化损失等

1、nn.Module

        nn.Module是torch.nn提供的一个类,是pytorch中我们自定义网络的一个基类,在这个类中定义了很多的方法,使得我们在继承这个类的时候非常的简单。        

        当我们自定义网络的时候,有两个方法需要特别注意:

                1、__init__需要调用super方法,继承父类的属性和方法。

                2、farward方法必须实现,用来定义我们的网络向前计算的过程。

        采用y=wx+b的模型举例:

from torch import nn

class Lr(nn.Module):
    def __init__(self):
        super(Lr,self).__init__()#继承父类init的参数
        self.linear = nn.Linear(1,1)

    def forward(self,x):
        out = self.linear(x)
        return out 

        其中,nn_Linear为torch预定义好的线性模型,就是y=kx+b,也被成为全链接层,传入的参数为输入的数量和输出的数量(不是大小,而是特征数)

        nn_Module定义了__call__的方法,实现的就是调用forward方法,即Lr的实例,能够直接被传入参数调用,实际上调用的是forward方法并传入参数。

model = Lr()
predict = mode1(x)

         model就是实例化的模型,其中传入的参数可以直接传入到forward函数中。

2、优化器类

        优化器(optimizer),可以理解为torch为我们封装的用来进行更新参数的方法,比如常见的随机梯度下降(stochastic,gradient,descent,SGD),优化器都是由torch.optim提供的,例如:

torch.optim.SGD(参数,学习率)

torch.optim.Adam(参数,学习率)

        其中,参数可以使用model.parameters()来获取,获取模型中所有requires_grad=True的参数。

optimizer = optim.SGD(model.parameters(), lr = 1e-3)#实例化

optimizer.zero_grad()#梯度设为0

loss.backward()#计算梯度

optimizer.step()#更新参数的值

3、损失函数

         torch中也有很多损失函数。

均方误差:nn.MSELoss()#常用于回归问题

交叉熵损失:nn.CrossEntropyLoss()#常用于分类

        使用方法 :

mode1 = Lr()#实例化模型
criterion = nn.MSELoss()#实例化损失函数
optimizer = optim.SGD(model.parameters(), lr = 1e-3)#实例化优化器类
for i in range(100):
    y_predict = model(x_true)#向前计算预测值
    loss = criterion(y_true,y_predict)#调用损失函数传入真实值和预测值,得到损失结果
    optimizer.zero_grad()#梯度设为0
    loss.backward()#计算梯度
    optimizer.step()#更新参数的值

4、线性回归的完整代码

import torch
from torch import nn
from torch import optim
import numpy as np
from matplotlib import pyplot as plt

#定义数据
x = torch.rand([50,1])
y = x * 3 + 0.8

#定义模型
class Lr(nn.Module):
    def __init__(self):
        super(Lr,self).__init__()#继承父类init的参数
        self.linear = nn.Linear(1,1)

    def forward(self,x):
        out = self.linear(x)
        return out 

#实例化模型、loss、优化器
model = Lr()#实例化模型
criterion = nn.MSELoss()#实例化损失函数
optimizer = optim.SGD(model.parameters(), lr = 1e-3)#实例化优化器类

#训练模型
for i in range(30000):
    y_predict = model(x)#向前计算预测值
    loss = criterion(y,y_predict)#调用损失函数传入真实值和预测值,得到损失结果
    optimizer.zero_grad()#梯度设为0
    loss.backward()#计算梯度
    optimizer.step()#更新参数的值
    if (i+1) % 20 == 0:
        print('Epach[{}/{}],loss:{:.6f}'.format(i,30000,loss.data))

#模型的评估
model.eval()#设置模型为评估模式,即预测模式
predict = model(x)
predict = predict.data.numpy()
plt.scatter(x.data.numpy(),y.data.numpy(),c = 'r')
plt.plot(x.data.numpy(),predict)
plt.show()

        输出如下:

         注意:model.eval()表示设置模型为评估模型,即预测模式。model.train(mode=True)表示设置模型为训练模型,在写模型中,训练的参数和预测的参数会不相同,到时候就需要具体告诉程序我们是进行训练还是进行预测,比如模型中存在Dropout,BatchNorm。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Pytorch进行波士顿房价预测的线性回归可以通过以下步骤进行: 1. 导入并查看数据:使用Pytorch原生算法实现线性回归时,首先需要导入数据并查看数据的结构和内容。这可以通过使用torch.tensor将数据转换为Pytorch的张量,并使用print函数查看数据的形状和值。 2. 数据预处理:在进行线性回归之前,通常需要对数据进行预处理。其中包括数据归一化和数据分割。数据归一化是将数据映射到一个特定的范围,以便更好地进行训练。数据分割是将数据分为训练集和测试集,以便进行模型的训练和评估。 3. 迭代训练:使用Pytorch的原生算法实现线性回归时,可以使用torch.optim中的优化器,如SGD或Adam,以及torch.nn中的损失函数,如均方误差(MSE),来进行迭代训练。迭代训练的过程是通过调整模型的参数,使得模型的预测结果尽可能接近真实标签。 4. 数据验证:在迭代训练完成后,可以使用测试集数据来验证模型的性能。通过将测试集数据输入模型,并计算预测结果与真实标签之间的损失值来评估模型的准确性。 以上是使用Pytorch进行波士顿房价预测线性回归的基本步骤。你可以按照这些步骤编写代码,并参考引用和引用的代码示例来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [深度学习 神经网络(4)线性回归-Pytorch实现房价预测](https://blog.csdn.net/Leytton/article/details/127561477)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [pytorch搭建CNN+LSTM+Attention网络实现行车速度预测项目代码加数据](https://download.csdn.net/download/2301_79009758/88247134)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值