pytorch的Variable和Parameters的联系和区别

article/2025/10/28 16:17:04

文章目录

  • 前言
  • 一、Variable
  • 二、Parameter
  • 总结

前言

首先看一下官方文档:
在这里插入图片描述

在这里插入图片描述

一、Variable

torch.autograd.Variable

Variable是对Tensor的封装,操作与tensor基本一致,不同的是,每一个Variable被构建的时候,都包含三个属性:

1、data:Variable中所包含的tensor
2、grad:tensor的梯度 .grad
3、以何种方式得到这种梯度 .grad_fn
之所以有Variable这个数据结构,是为了引入计算图(自动求导),方便构建神经网络。通过调用backward(),我们可以对某个Variable(譬如说y)只进行一次自动求导,但如果我们再对这个Variable进行一次backward()操作,会发现程序报错。这是因为PyTorch默认做完一次自动求导后,就把计算图丢弃了。我们可以通过设置retain_graph = True,保留计算图,来实现多次求导。

作者:双听
链接:https://www.jianshu.com/p/cb739922ce88
来源:简书
操作下面用例子说明:

from torch.autograd import Variable
a = torch.randn(10, 5)
b = torch.randn(10, 5)
x = Variable(a, requires_grad=True)
y = Variable(b, requires_grad=True)
z = x + y
z.backward(retain_graph=True)
x.grad            # x的梯度 10x1 的全1tensor
z.grad_fn  

二、Parameter

torch.nn.Parameter(是Variable的子类)
如果在网络的训练过程中需要更新,就要定义为Parameter,  类似为W(权重)和b(偏置)也都是Parameter

Variable默认是不需要求梯度的,还需要手动设置参数 requires_grad=True。Variable因为要多次反向传播,那么在backward的时候还要手动注明参数(),就非常麻烦。
Pytorch主要通过引入nn.Parameter类型的变量和optimizer机制来解决了这个问题。Parameter是Variable的子类,本质上和后者一样,只不过parameter默认是求梯度的,同时一个网络中的parameter变量是可以通过 net.parameters() 来很方便地访问到的,只需将网络中所有需要训练更新的参数定义为Parameter类型,再用以optimizer,就能够完成所有参数的更新了,例如:optimizer = torch.optim.SGD(net.parameters(), lr=1e-1)

总结

Variable,Parameter和torch.tensor()
相同点
:torch.tensor()、torch.autograd.Variable和torch.nn.Parameter 基本一样
前两者都可以设置requires_grad参数,后者则直接默认requires_grad=True。
三者都拥有.data,.grad,.grad_fn等属性。
所以,只要requires_grad=True,都可以计算梯度以及backward()。

不同之处
torch.nn.Parameter,直接默认requires_grad=True,在参数量大时更加方便。


http://chatgpt.dhexx.cn/article/v6wGTCSM.shtml

相关文章

关于variable的理解

引用莫烦大大的话来说,tensor是一个鸡蛋,而variable相当于一个篮子,把tensor装起来 其中variable有三个参数: data:存储了Tensor,是本体的数据 grad:保存了data的梯度,本事是个Varia…

深度学习——Variable(已经过时了!)

一、简介 深度学习中使用pytorch框架,使用的数据一般是torch中的tensor形式。但是在参数表示中,一般是用variable变量形式。 二、variable的使用 (1)如何将tensor转化为variable pytorch1.0之后tensor和variable没有区别了&am…

Pytorch的Variable详解

pytorch两个基本对象:Tensor(张量)和Variable(变量) 其中,tensor不能反向传播,variable可以反向传播。 tensor的算术运算和选取操作与numpy一样,一次你numpy相似的运算操作都可以迁…

13.2 用Patsy创建模型

1、patsy适合描述statsmodels的线性模型,其公式是一个特殊的字符串语法,表示为模型设计矩阵 2、patsy.dmatrices函数接收一个公式字符串和一个数据集,为线性模型设计矩阵 3、Pasty对象可以直接传递到算法,如下面的最小二乘回归 4、…

Could not find a version

目标检测—教你利用yolov5训练自己的目标检测模型 我自己的另一篇配置文件和代码地址博客总结 CondaHTTPError: HTTP 000 CONNECTION FAILED for url 的问题终极解决方案 配置环境 安装pytorch 利用Anaconda安装pytorch和paddle深度学习环境pycharm安装—免额外安装CUDA和c…

statsmodels遇到的坑!!!

ImportError: cannot import name cached_data ModuleNotFoundError: No module named patsy python SimpleExpSmoothing 错误 statsmodels安装包地址: Python Extension Packages for Windows - Christoph Gohlke (uci.edu) 现已完美解决~

python数据处理包_python数据处理包安装

1> 本机环境 C:\Python27>python Python 2.7.12rc1 (v2.7.12rc1:13912cd1e7e8, Jun 12 2016, 05:57:31) [MSC v.1500 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information.…

手把手教你用Python进行回归(附代码、学习资料)

作者: GURCHETAN SINGH 翻译:张逸 校对:丁楠雅 本文共5800字,建议阅读8分钟。本文从线性回归、多项式回归出发,带你用Python实现样条回归。 我刚开始学习数据科学时,第一个接触到的算法就是线性回归。在把…

【Python数据分析】实践编写篇2:用Python进行回归分析与相关分析

目录 一、前言 1.1 回归分析 1.2 相关分析 二、代码的编写 2.1 前期准备 2.2 编写代码 2.2.1 相关分析 2.2.2 一元线性回归分析 2.2.3 多元线性回归分析 2.2.4 广义线性回归分析 2.2.5 logistic回归分析 三、代码集合 一、前言 1.1 回归分析 是用于研究分析某一变量受其…

chatgpt赋能Python-python_patsy

Python Patsy: 一个用于统计建模的Python库 什么是Patsy? Patsy是一个Python库,用于进行统计建模和数据预处理。Patsy的主要目的是将数据转换为适合统计建模的格式。它是一个基于公式的语言,通过描述预测变量和目标变量之间的关系&#xff…

Simple Linear Regression:ONE

前言 对于一些库的说明 numpy:支持矩阵运算,在矩阵运算这方面可以完全替代基于向量编程的matlab pandas:这个是一个数据存储库,是以表单(dataframe)为基本单位,这个库的好处在于行列 索引并不是…

python建模库介绍:pandas与建模代码的结合,使用Patsy创建模型描述

13.1 pandas与建模代码的结合 使用pandas用于数据载入和数据清洗,之后切换到模型库去建立模型是一个常见的模型开发工作流。在机器学习中,特征工程时模型开发的重要部分之一,特征工程就是指从原生数据集中提取可用于模型上下文的有效信息的数…

py之patsy:patsy的简介、安装、使用方法之详细攻略

py之patsy:patsy的简介、安装、使用方法之详细攻略 目录 patsy的简介 patsy的安装 patsy的使用方法 patsy的简介 Patsy是一个python库,用于描述统计模型(尤其是线性模型,或具有线性组件的模型)和构建设计矩阵。Pats…

两个线程循环打印121212...

A线程打印1,B线程打印2,要求循环打印121212... 思路 两个线程,可以想到的是多线程编程,共享变量,数据等,设想先让一个线程打印1,然后处于等待(wait)状态,接着…

静态路由实验总结

静态路由试验 实验目的 实现此图的全网互通 实验基础知识 路由的工作原理:路由器收到数据包之后,会查看其目标IP地址,会查询本地的路由表,若表中记录有去往目标的路径,则无条件转发;若没有去往目标的路…

C++第八次上机实验总结(多态)

一、实验目的: ①.掌握C语言多态性的基本概念; ②.掌握运算符重载函数的声明和定义方式; 二、试验任务: 1. 编写一个程序,实现两个负数相加(分别用类外定义运算符重载函数、友元运算符重载函数、成员运算符…

java程序实验总结_Java实验报告一及作业总结二

Java实验报告 实验一 Java开发环境与简单Java程序 一、 实验目的 (1) 熟悉JDK开发环境 (2) 熟练掌握结构化程序设计方法 二、 实验内容 1. 打印输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其中各位数字立方和等于该数本身。例如,153是一个“水仙花数”。 2. 编写…