pytorch之线性回归

线性回归(使用pytorch实现) 阅读详情

pytorch基本语法

写在前面:
1、了解pytorch的基本用法,pytorch类似numpy,只不过pytorch含自动求导和可以在GPU下允许,提高程序运行速度。
2、本文会根据线性回归模型的介绍引入pytorch进行运算,主要是帮助解决一些同学只懂理论不懂实践的困惑。

(一)线性模型

1.1 概念及应用

例如一个样本示例x\boldsymbol{x}x,它由 ddd 个属性所描述, x={x1;x2;...;xd}\boldsymbol{x}=\{ x_1;x_2 ; ...;x_d \}x={x1​;x2​;...;xd​},其中xix_ixi​是xxx在第iii个属性上的取值,线性模型就是找一个线性组合来进行预测的函数,依据这些属性的描述可以预测yyy。一般的线性模型如下:
f(x)=wTx+b(1.1) f(x) = \boldsymbol{w}^T\boldsymbol{x} + b \tag{1.1}f(x)=wTx+b(1.1)
其中 w\boldsymbol{w}w 是权重参数,它的长度取决于样本属性值。 w={w1;w2;...;wd}\boldsymbol{w}=\{ w_1;w_2 ; ...;w_d \}w={w1​;w2​;...;wd​},bbb学得之后,模型才得以确立。因此训练模型的过程主要是更新www和bbb的值。

线性模型经常用于回归与分类,本博主要先介绍线性模型在回归上的应用。

1.2 线性回归

前一节我们是给定的一个样本示例x\boldsymbol{x}x,通常训练一个模型时一个样本是远远不够的,因此本节给定的是一个包含mmm个样本ddd个属性的数据集,此时样本集矩阵便如下表示:
X=(x11x12...x1dy1x21x22...x2dy2...............xm1xm2...xmdy3)(1.2) \boldsymbol{X} = \left( \begin{array}{cccc|c} x_{11} & x_{12} &... & x_{1d} & y_1 \\ x_{21} & x_{22} &... & x_{2d} & y_2 \\ {...} & {...} &... & {...} & ... \\ x_{m1} & x_{m2} &... & x_{md} & y_3 \\ \end{array} \right) \tag{1.2}X=⎝⎜⎜⎛​x11​x21​...xm1​​x12​x22​...xm2​​............​x1d​x2d​...xmd​​y1​y2​...y3​​⎠⎟⎟⎞​(1.2)
矩阵含义是第一个样本x1x_1x1​的属性值由ddd个,它的标签是y1y_1y1​ 因此表述为{x11,x12...x1d∣y1}\{x_{11} , x_{12} ... x_{1d} |y_1\}{x11​,x12​...x1d​∣y1​},而线性回归就是根据(1.1)的公式来预测yiy_iyi​的值,它尽可能训练模型使得f(xi)≈yif(x_i) \approx y_if(xi​)≈yi​,也就是它俩差距尽可能小。下面是两个简单问题:

  • (1) 那么怎么衡量预测值和真实值的差距最小?
    回归任务中经常采用均方误差来去衡量真实值与预测值的差距,因此训练模型过程就是使均方误差最小化然后确定www和bbb的参数值。这里所说的均方误差就是模型用到的损失函数(Loss Function)。
  • (2) 那么如何去调整确定www和bbb的值?
    通常采用梯度下降的方法来调整www和bbb的值,梯度下降方法有:SGD,Adam等方式。

本博主要介绍线性模型在pytorch上的实现,梯度下降方法将抽时间再写。

(二)pytorch基础

首先需要了解什么是张量:
0维张量就是标量也就是一个数:2
1维张量就是向量也就是这样:[1,2,3…]
2维张量就是矩阵也就是这样:[[1,2,3],[2,2,3]]
3维张量就是存储例如图像颜色RGB数据

2.1 数据类型

主要介绍常见的数据类型和生成数据的函数

函数应用
torch.FloatTensor用于生成浮点型的tensor
torch.IntTensor用于生成整型的tensor
torch.DoubleTensor用于生成双精度浮点型tensor
torch.CharTensor字符型tensor
torch.LongTensor长整型tensor
torch.rand用于生成数据类型为浮点型且维度指定的随机Tensor,数据在0~1之间均匀分布
torch.randn(a,b)用于生成数据类型为浮点型且维度指定的随机Tensor,数据满足均值为0,方差为1的正太分布
torch.range(a,b,c)用于随机生成起点a终点b步长c的浮点型tensor
torch.zeros生成浮点型且维度指定全为0的数据

注意rand不建议这样用rand(a)这样生成的是一个数组,而不是一个矩阵,推荐用rand(a,)
torch.Tensor默认数据类型是浮点型,可以采用type(变量名)或变量名.type()查看其tensor数据类型

2.2 基本运算

主要介绍常见的运算函数

函数应用
torch.abs(a)返回tensor类型的a的绝对值
torch.add(a,b)返回a+b后的和
torch.clamp(a,b,c)对参数按照自定义范围裁剪,将结果作为输出,对a进行裁剪
torch.div(a,b)求商a/b
torch.mul求积
torch.pow求幂
torch.mm求积 必须利用矩阵乘法规则进行求积
torch.mv求积 矩阵向量间乘法规则运算

2.3 线性回归实现

首先需要获取样本,设置1000个包含2个属性的样本集 ,生成1000个y=2*x+1的真实值y,通过训练1000次模型得到w和b,比较w和2,b和1的接近程度,可知道拟合的效果。

import torch 
from torch.autograd import Variable
%matplotlib inline
from matplotlib import pyplot as plt
x = torch.randn(1000,1)
y = x * 2 +  1
plt.scatter(x.numpy(),y.numpy()) #x.squeeze()将二维变为一维
w = Variable(torch.rand(1,1),requires_grad=True)
b = Variable(torch.zeros(1,1),requires_grad=True)
lr = 0.000003
for i in range(1000):
    x_train,y_train = x,y
    x_train,y_train = Variable(x_train),Variable(y_train)
    
    y_pred = x_train.mm(w) + b
    loss = (0.5 * (y_pred - y_train) ** 2).sum() #求和是因为后向传播的是标量
    
    loss.backward()
    #梯度更新
    w.data.sub_(lr * w.grad.data)
    b.data.sub_(lr * b.grad.data)
    #梯度清0
    w.grad.data.zero_()
    b.grad.data.zero_()
print(w,b)
#输出:tensor([[1.9331]], requires_grad=True) tensor([[0.9525]], requires_grad=True)

拟合曲线如下:

#生成测试样本  100个数
x_test = torch.randn(100,1)
#用训练好的w和b值得出曲线 和 真实的w和b得出的曲线拟合
y_test = torch.mm(x_test,w.data)+ b.data
y = x_test * 2 + 1 #之前的w=2,b=1
plt.plot(x_test.numpy(),y_test.numpy())
plt.scatter(x_test.numpy(),y.numpy())
plt.show()

训练100次的拟合如下:
在这里插入图片描述
此时w和b的值为:0.7199 , 0.2414
训练1000次的拟合如下:
在这里插入图片描述
此时的w和b的值如下:1.8973,0.9315
显然1000次训练效果更好

总结:本文博客算是入门,只简单的介绍了机器学习算法中的线性回归,主要就是介绍pytorch基础和线性回归的代码实现,内容中一些后向传播的求导过程直接采用的是autograd包中的自动给求导,下一节将探讨简单神经网络的pytorch实现。
感谢:周志华:机器学习,唐进民:深度学习之pytorch实战计算机视觉

有问题欢迎留言:
在这里插入图片描述

Pytorch实现线性回归模型 我们接下来使用Pytorch的API来手动构建一个线性回归的假设函数损失函数及优化方法,熟悉一下训练模型的流程。🧨我们将这批数据每次分成16份训练,并且这样重复训练epochs次,可以更深入地学习数据中的特征和模式,有助于防止模型快速陷入局部最优解,从而提高模型的泛化能力,而且。由于每个批次的数据都是随机抽取的。方法被调用时,PyTorch 会自动计算该张量相对于所有需要梯度的参数的梯度,并将这些梯度累加到对应参数的。是简单函数还是复杂的损失函数,都能利用相同的方法来进行梯度的反向传播。 阅读详情

相关推荐

线性回归 Pytorch

通常情况下,我们使用均方误差(Mean Squared Error, MSE)作为损失函数,用于衡量模型预测值与真实值之间的差异。线性回归是一种用于建立自变量(输入)和因变量(输出)之间线性关系的方法。在多维线性回归中,我们考虑多个自变量与一个因变量之间的线性关系。,使得损失函数最小化。我们通过梯度下降等优化算法来实现这一目标。具体地,我们反复迭代更新权重和偏置项,直到损失函数收敛到最小值。模型训练的目标是找到最优的权重。

言午日月 1148

Pytorch 线性回归

线性回归 回归(regression)是能为一个或多个自变量与因变量之间关系建模的一类方法。 在自然科学和社会科学领域,回归经常用来表示输入和输出之间的关系。 在机器学习领域中的大多数任务通常都与预测(prediction)有关。 当我们想预测一个数值时,就会涉及到回归问题。 常见的例子包括:预测价格(房屋、股票等)、预测住院时间(针对住院病人等)、 预测需求(零售销量等)。 0. 环境介绍 环境使用 Kaggle 里免费建立的 Notebook 教程使用李沐老师的 动手学深度学习 网站和 视频讲解 小

负负得正的博客 2653

树莓派4B:控制步进电机

文章目录准备阶段接线阶段树莓派程序 准备阶段 准备以下物品,淘宝都可以买到: 57步进电机 电源开关(220v转24v,3A,72W) 步进电机驱动器 电源线 电线 杜邦线 树莓派4B一套 具体型号如下: 接线阶段 整体:接线效果如下图 电源开关起220v转24v作用,很好接线,输出24v接入步进电机驱动器 步进电机驱动器的 A+ A- B+ B- 按提示接步进电机四线,步进电机上就会有说...

学习路上的鸭子的博客 1万+

【动手学深度学习】线性回归的简洁实现【代码】

更详细的解释地址 import numpy as np import torch from torch.utils import data from d2l import torch as d2l true_w = torch.tensor([2, -3.4]) true_b = 4.2 features, labels = d2l.synthetic_data(true_w, true_b, 1000) def load_array(data_arrays, batch_size, is_train=

py今天刷题了吗 868

基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现

本文详细介绍基于ESP32与PCM5102的WiFi无损音频传输系统设计与实现。通过I2S接口直接传输PCM数据,避免SRC重采样,实现真正的HIFI级音质。涵盖硬件连接、软件架构、网络传输优化及实际音质对比,为音频爱好者提供高性价比的无损无线音频解决方案。

rnn9storyteller的博客 949

Nginx/OpenResty目录穿越漏洞复现

Nginx/OpenResty目录穿越漏洞复现 漏洞背景: 2020年03月18日, 360CERT监测发现 openwall oss-security 邮件组披露了两枚漏洞。在特定配置下 nginx/openresty 存在 内存泄漏漏洞/目录穿越漏洞。 Nginx 是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存。 OpenResty是一个基于nginx的Web平台,它对nginx增加LuaJIT引擎使其运行Lua脚本。 影响版本: nginx <= v1.17

小小猪的博客 1万+

pytorch实现线性回归

【代码】pytorch实现线性回归。

m0_62032391的博客 3122

PCRNet: Point Cloud Registration Network using PointNet Encoding

PCRNet算是在ModelNet40这种object-centric数据集上用deep-learning做配准最好入手的一篇文章了,整体架构涉及简洁明了,一句话描述就是简单粗暴,话不多说,直接上网络架构图: Work Flow: 首先对输入source (N×3N \times 3N×3)与template (M×3M \times 3M×3)进行PointNet操作,即MLP + max-pooling后,分别得到描述各自点云的维度为1024的global feature vector:Φ(PS).

dloading7的博客 1648

PyTorch实现线性回归--LinearRegression

pytorch入门,线性回归,博大家一笑

Bro3Rd的博客 766

ComfyUI实战:AnimateDiff与ControlNet结合,打造无缝风格化视频转绘

本文详细介绍了如何利用ComfyUI平台,结合AnimateDiff与ControlNet插件,实现高质量的视频风格化转绘。通过搭建节点工作流、调整关键参数,有效解决画面闪烁与失真问题,并分享了进阶玩法与常见问题解决方案,帮助用户轻松打造流畅、风格统一的动态视觉效果。

weixin_29039773的博客 341

QGIS基于快鸟(QuickBird)影像统计小麦种植面积

​01数据情况 本次选用某地4月份快鸟(QuickBird)影像为例,使用QGIS演示提取小麦播种情况,并按照200米*200米分区计算种植面积的过程。 注:本文对应的操作视频作为今天第二篇推送同时发布,习惯看视频的朋友可以点击观看。 附数据压缩包: 链接:https://pan.baidu.com/s/1JVUS8uAOR61RxC1n9Or9_w 提取码:qgis 含快鸟影像QB_subset.tif和200*200米分区矢量图层200Mgrid.shp。 ...

QGISClass的博客 1979

【pyTorch】线性回归 Linear Regression

一、导入基本的包 import torch import torch.nn as nn from torch.autograd import Variable import torch.optim as optim import matplotlib.pyplot as plt import numpy as np 二、数据准备 pyTorch中的基本数据类型为Tensor,相当于nump...

qq_42122025的博客 584

搞定最强大模型Gemini学生订阅,白嫖一年,包教包会

白嫖现在最强大模型

BUG猿的博客 2万+

Linear Regression with PyTorch 用PyTorch实现线性回归

Linear Regression with PyTorch 用PyTorch实现线性回归

leoatliang的博客 1412

全覆盖路径规划开源项目Clean-robot-turtlebot3原理及流程概括总结

本系列文章主要介绍全覆盖路径规划开源项目Clean-robot-turtlebot3的相关内容,包含如下四篇文章,分别介绍了开源项目Clean-robot-turtlebot3流程的概括总结、ROS坐标系常用坐标及其变换、Clean-robot-turtlebot3关键函数解析等内容。

慕羽★的博客 6107

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Pytorch 入门之--线性回归 Linear_Regression Pytorch 实现

__author__ = 'SherlockLiao' import torch from torch import nn, optim from torch.autograd import Variable import numpy as np import matplotlib.pyplot as plt x_train = np.array([[3.3], [4.4], [5.5]...

机器学习专栏 2549

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Pytorch实现线性回归Linear Regression

Batch Gradient Descent:使用整个训练集来更新模型的参数。学习率过低,需要大量的迭代才能获得最小值。对于线性回归,特定类型的噪声是高斯噪声。创建自定义模块(内含一个线性回归)用PyTorch实现线性回归模块。学习率过高,可能错过参数的最佳值。与上文类似,只是多加了个b。

sweet_Mary的博客 1235

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

pytorch实现线性回归_如何用pytorch实现线性回归

pytorch实现线性回归Probably, implementing linear regression with PyTorch is an overkill. This library was made for more complicated stuff like neural networks, complex deep learning architectures, etc. Neve...

weixin_26756255的博客 609

【Pytorch学习】-- LinearRegression

LinearRegression Implement

Dylan's Blog 1710

Lecture5 实现线性回归(Linear Regression with PyTorch)

《Pytorch》刘二大人教程笔记,逐行代码理解

Curz酥的博客 1096

Pytorch专题实战——线性回归(Linear Regression)

文章目录1.计算流程2.Pytorch搭建线性回归模型2.1.导入必要模块2.2.构造训练数据2.3.测试数据及输入输出神经元个数2.4.搭建模型并实例化2.5.训练 1.计算流程 1)设计模型: Design model (input, output, forward pass with different layers) 2) 构建损失函数与优化器:Construct loss an...

weixin_37763870的博客 680

【PyTorch】线性回归/Linear Regression

1. 模型说明 用PyTorch实现线性回归比较简单,主要是调用内置函数 nn.Linear(input_size, output_size),然后使用自动微分和随机梯度下降SGD来更新模型参数。 2. 相关代码 具体代码实现如下: import torch import torch.nn as nn import numpy as np import matplotlib.pyplot as plt # plot tool # Hyper -parameters input_size = 1 outpu

积流成河 835

pytorch线性回归_使用PyTorch进行线性回归

pytorch线性回归Your first step towards deep learning 您迈向深度学习的第一步 In my previous posts we have gone through 在我以前的帖子中,我们已经看过 Deep Learning — Artificial Neural Network(ANN) 深度学习-人工神经网络(ANN) Tensors — Basic...

weixin_26752765的博客 4297

pytorch线性回归_PyTorch中的线性回归

pytorch线性回归For all those amateur Machine Learning and Deep Learning enthusiasts out there, Linear Regression is just the right way to kick start your journey. If you are new to Machine Learning with s...

weixin_26752765的博客 563

Pytorch之LinearRegression

任务内容: 学习《线性单元和梯度下降》相关内容,拟合一元二次方程“y = 2

zhanly19的博客 918

《PyTorch深度学习实践》Lecture_05 用Pytorch实现线性回归 Linear Regression with PyTorch

B站刘二大人老师的《PyTorch深度学习实践》Lecture_05 重点回顾+代码复现 Lecture_05 用Pytorch实现线性回归 Linear Regression with PyTorch 一、重点回顾 用Pytorch实现线性回归的四大步骤 (一)数据集准备 Prepare Dataset import torch x_data = torch.Tensor([[1.0], [2.0], [3.0]]) y_data = torch.Tensor([[2.0], [4.0], [6.0]])

Lilo_的博客 412
上一篇: python解析xml超简单
下一篇: Hierarchical Co-Attention for Visual Question Answering---视觉问答的分层共同注意力
snow5618
博客等级 码龄9年 141粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值