首页 > 其他分享 >Pytorch实现线性回归模型

Pytorch实现线性回归模型

时间:2023-05-16 11:46:18浏览次数:42  
标签:dim nn 模型 torch epoch Pytorch train 线性 model

目录

初识pytorch,本文基于pytorch构建最基本的神经网络,实现线性回归模型。

(1)构造一组输入数据X和其对应的标签y

x_values = [i for i in range(11)]
x_train = np.array(x_values, dtype=np.float32)#np.array格式
x_train = x_train.reshape(-1, 1)#把数据转换成矩阵,防止出错
y_values = [2*i + 1 for i in x_values]#定义回归方程y=2x+1
y_train = np.array(y_values, dtype=np.float32)#np.array格式
y_train = y_train.reshape(-1, 1)

(2)构建模型

 class LinearRegressionModel(nn.Module):#定义类,import torch.nn as nn,nn.Module:只用写用哪个层
    def __init__(self, input_dim, output_dim):#构造函数,写用到哪些层
        super(LinearRegressionModel, self).__init__()
        self.linear = nn.Linear(input_dim, output_dim)  #nn.Linear()全连接层,传入输入维度,输出维度

    def forward(self, x):#前向传播函数,用到的层如何使用的
        out = self.linear(x)#在全连接层中输入x得到结果
        return out

(3)指定好参数和损失函数

input_dim = 1
output_dim = 1

model = LinearRegressionModel(input_dim, output_dim)#定义模型

epochs = 1000#一共迭代1000次
learning_rate = 0.01#学习率
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)#优化器,SGD,传入需要优化的参数和学习率
criterion = nn.MSELoss()#损失函数,分类任务常用交叉熵损失,回归任务常用MSE均方差损失函数

(4)训练模型

for epoch in range(epochs):#遍历1000次
    epoch += 1
    # np.array格式不能直接进行训练,转换成tensor格式
    inputs = torch.from_numpy(x_train)
    labels = torch.from_numpy(y_train)

    # 梯度要清零每一次迭代
    optimizer.zero_grad() #如果不清空梯度会累加起来

    # 前向传播
    outputs = model(inputs)

    # 计算损失
    loss = criterion(outputs, labels)

    # 返向传播
    loss.backward()

    # 更新权重参数
    optimizer.step()
    if epoch % 50 == 0:
        print('epoch {}, loss {}'.format(epoch, loss.item()))

结果:

(5)测试模型预测结果

predicted = model(torch.from_numpy(x_train).requires_grad_()).data.numpy()#进行一次前向传播

结果:

(6)模型的保存与读取

torch.save(model.state_dict(), 'model.pkl')#model.state_dict():模型的权重参数
model.load_state_dict(torch.load('model.pkl'))#读取

(7)使用GPU进行训练

只需要把数据和模型传入到cuda里面就可以了,与CPU训练代码有两点不同,已加注释说明

import torch
import torch.nn as nn
import numpy as np


class LinearRegressionModel(nn.Module):
    def __init__(self, input_dim, output_dim):
        super(LinearRegressionModel, self).__init__()
        self.linear = nn.Linear(input_dim, output_dim)  

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

input_dim = 1
output_dim = 1

model = LinearRegressionModel(input_dim, output_dim)


device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")#指定设备cuda,如果cuda配置好的用cuda否则用CPU
model.to(device)#把模型放入cuda


criterion = nn.MSELoss()


learning_rate = 0.01

optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)

epochs = 1000
for epoch in range(epochs):
    epoch += 1
    inputs = torch.from_numpy(x_train).to(device)#把输入x传入cuda
    labels = torch.from_numpy(y_train).to(device)#把输入y传入cuda

    optimizer.zero_grad() 

    outputs = model(inputs)

    loss = criterion(outputs, labels)

    loss.backward()

    optimizer.step()

    if epoch % 50 == 0:
        print('epoch {}, loss {}'.format(epoch, loss.item()))

标签:dim,nn,模型,torch,epoch,Pytorch,train,线性,model
From: https://www.cnblogs.com/lushuang55/p/17404086.html

相关文章

  • 1、TCP/IP模型有哪几层?
    应用层应用层只需关注给用户提供的功能,当两个设备需要进行通讯的时候,只需要把要发送的数据发送给传输层即可。传输层传输层是为应用层提供网络支持的,传输层有两个传输协议:TCP和UDPTCP:大部分应用用的正是TCP协议,如HTTP。相对于UDP协议,TCP协议多了很多特性:流量控制、超时重传......
  • http yolov5 tensorrt C++ windows 客户端服务器高性能部署,使用tensorrt推理yolov5模
    httpyolov5tensorrtC++windows客户端服务器高性能部署,使用tensorrt推理yolov5模型,封装成了dll;http服务器,监听指定端口、调用dll加载模型到内存(可同时支持多个模型同时加载并行运行)同时监听指定http指定路径是否有请求,收到请求后解析json数据中数据,从中解析出识别指定模型类......
  • Qt ffmpeg yolov5 tensorrt 高性能部署,使用tensorrt推理yolov5模型,封装成了dll, 支
    Qtffmpegyolov5tensorrt高性能部署,使用tensorrt推理yolov5模型,封装成了dll,支持多窗口多线程推理,本项目为4窗口版,各个窗口支持识别类别,阈值,roi区域等设置。算法支持onnxruntime,tensorrt推理,以及推理加deepsort,bytetrack和kcf多目标跟踪。ID:353200676908443403......
  • yolov5 yolov5_obb rotate 旋转目标检测 C/C++ 支持同时多相机和多模型
    yolov5yolov5_obbrotate旋转目标检测C/C++支持同时多相机和多模型windowsvs2019封装dll,一个dll,支持同模型多次加载和不同模型同时多次加载,支持mfc,和qt调用,支持批量图片识别,Demo支持图片、视频、文件夹和RTSP流识别。ID:143000668549326309......
  • labview yolov5 opencv dnn推理,封装dll, labview调用dll,支持同时加载多个模型并行推
    labviewyolov5opencvdnn推理,封装dll,labview调用dll,支持同时加载多个模型并行推理,可cpu/gpu,可识别视频和图片,只需要替换模型的onnx和nameclass即可ID:212200673924813995......
  • R语言中进行期权定价的Heston随机波动率模型|附代码数据
    原文链接:http://tecdat.cn/?p=12111最近我们被客户要求撰写关于Heston随机波动率的研究报告,包括一些图形和统计输出。在本文中,我将向您展示如何模拟股票价格的Heston随机波动率模型Heston模型是一种期权估值方法,它考虑到同一资产在给定时间交易的不同期权的波动性变化。它试图......
  • 双向BiGRU做多输入单输出预测模型,直接替换数据就可以用。 程序
    双向BiGRU做多输入单输出预测模型,直接替换数据就可以用。程序语言是matlab,需求最低版本为2020及以上。程序可以出真实值和预测值对比图,线性拟合图,可打印多种评价指标。PS:以下效果图为测试数据的效果图,主要目的是为了显示程序运行可以出的结果图,具体预测效果以个人的具体数据为准......
  • 双向BiGRU做单输入单输出时间序列预测模型,直接替换数据就可以用。
    双向BiGRU做单输入单输出时间序列预测模型,直接替换数据就可以用。程序语言是matlab,需求最低版本为2020及以上。程序可以出真实值和预测值对比图,线性拟合图,可打印多种评价指标。PS:以下效果图为测试数据的效果图,主要目的是为了显示程序运行可以出的结果图,具体预测效果以个人的具体......
  • 海鸥优化算法SOA结合GRU做时间序列单输入单输出预测模型,要求数据是单列的时间序列数据
    海鸥优化算法SOA结合GRU做时间序列单输入单输出预测模型,要求数据是单列的时间序列数据,直接替换数据就可以用。程序语言是matlab,需求最低版本为2018及以上。程序可以出真实值和预测值对比图,线性拟合图,可打印多种评价指标。PS:以下效果图为测试数据的效果图,主要目的是为了显示程序运......
  • RNN预测模型做多输入单输出预测模型,直接替换数据就可以用。 程序
    RNN预测模型做多输入单输出预测模型,直接替换数据就可以用。程序语言是matlab,需求最低版本为2021及以上。程序可以出真实值和预测值对比图,线性拟合图,可打印多种评价指标。PS:以下效果图为测试数据的效果图,主要目的是为了显示程序运行可以出的结果图,具体预测效果以个人的具体数据为......