python variable_PyTorch中的Variable变量详解

一、了解Variable

顾名思义,Variable就是 变量 的意思。实质上也就是可以变化的量,区别于int变量,它是一种可以变化的变量,这正好就符合了反向传播,参数更新的属性。

具体来说,在pytorch中的Variable就是一个存放会变化值的地理位置,里面的值会不停发生片花,就像一个装鸡蛋的篮子,鸡蛋数会不断发生变化。那谁是里面的鸡蛋呢,自然就是pytorch中的tensor了。(也就是说,pytorch都是有tensor计算的,而tensor里面的参数都是Variable的形式)。如果用Variable计算的话,那返回的也是一个同类型的Variable。

【tensor 是一个多维矩阵】

用一个例子说明,Variable的定义:

import torch

from torch.autograd import Variable # torch 中 Variable 模块

tensor = torch.FloatTensor([[1,2],[3,4]])

# 把鸡蛋放到篮子里, requires_grad是参不参与误差反向传播, 要不要计算梯度

variable = Variable(tensor, requires_grad=True)

print(tensor)

"""

1 2

3 4

[torch.FloatTensor of size 2x2]

"""

print(variable)

"""

Variable containing:

1 2

3 4

[torch.FloatTensor of size 2x2]

"""

注:tensor不能反向传播,variable可以反向传播。

二、Variable求梯度

Variable计算时,它会逐渐地生成计算图。这个图就是将所有的计算节点都连接起来,最后进行误差反向传递的时候,一次性将所有Variable里面的梯度都计算出来,而tensor就没有这个能力。

v_out.backward() # 模拟 v_out 的误差反向传递

print(variable.grad) # 初始 Variable 的梯度

'''

0.5000 1.0000

1.5000 2.0000

'''

三、获取Variable里面的数据

直接print(Variable) 只会输出Variable形式的数据,在很多时候是用不了的。所以需要转换一下,将其变成tensor形式。

print(variable) # Variable 形式

"""

Variable containing:

1 2

3 4

[torch.FloatTensor of size 2x2]

"""

print(variable.data) # 将variable形式转为tensor 形式

"""

1 2

3 4

[torch.FloatTensor of size 2x2]

"""

print(variable.data.numpy()) # numpy 形式

"""

[[ 1. 2.]

[ 3. 4.]]

"""

扩展

在PyTorch中计算图的特点总结如下:

autograd根据用户对Variable的操作来构建其计算图。

1、requires_grad

variable默认是不需要被求导的,即requires_grad属性默认为False,如果某一个节点的requires_grad为True,那么所有依赖它的节点requires_grad都为True。

2、volatile

variable的volatile属性默认为False,如果某一个variable的volatile属性被设为True,那么所有依赖它的节点volatile属性都为True。volatile属性为True的节点不会求导,volatile的优先级比requires_grad高。

3、retain_graph

多次反向传播(多层监督)时,梯度是累加的。一般来说,单次反向传播后,计算图会free掉,也就是反向传播的中间缓存会被清空【这就是动态度的特点】。为进行多次反向传播需指定retain_graph=True来保存这些缓存。

4、backward()

反向传播,求解Variable的梯度。放在中间缓存中。

以上这篇PyTorch中的Variable变量详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript高级程序设计---学习笔记(四)

1.全局变量不能通过delete操作符删除,而直接在window对象上定义的属性可以。 var age 29;window.color "red";delete age;//无法删除delete color;//可以删除alert(window.age);//29alert(window.color);//undefined 2.尝试访问未声明的变量会抛出错误&…

git commit查找提交的关键字

使用命令 git log --grepaplog 参考: https://stackoverflow.com/questions/1337320/how-to-grep-git-commit-diffs-or-contents-for-a-certain-word

PyTorch 报错:TypeError: exceptions must derive from BaseException

项目场景: PyTorch 报错:TypeError: exceptions must derive from BaseException 其实是个低级错误,我个人认为是因为没有找到要运行的载体。 问题描述 在 base_options.py 里面设置 --netG 的参数只能在这几个里面选择: self…

python复制sheet_python excel sheet复制

from xlwt import *对excel增加行def writeRow(tableObj,rowNum,tmpList,xlsStyleDict{}):for num,o in enumerate(tmpList):if num in xlsStyleDict:style xlsStyleDict.get(num)tableObj.write(rowNum,num,o,style)else:tableObj.write(rowNum,num,o)param fileName:文件名p…

新手入坑 java的开发语言环境

开发java程序的环境 1.下载jdk,从官网下载或从可靠渠道下载 2.安装jdk,jdk包括jre,把jdk和jre安装到相同的父级文件目录中 3.配置系统环境变量path,把jdk中的bin目录添加到path变量中,应该与其他路径以分号相分隔 4.编…

【WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, st】

项目场景: 【WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, st】 解决方案: 在命令执行窗输入: pip install nXXXXXXX -i http://pypi.douban.com/simple --trusted-host pypi.douban.com# (其中的nXXXXXXX 是你…

C语言测试n的阶乘和x的n次方

题目描述 输入一个正数x和一个正整数n,求下列算式的值。要求定义两个调用函数:fact(n)计算n的阶乘;mypow(x,n)计算x的n次幂(即xn),两个函数的返回值类型是double。 输出保留4位小数。 输入 x n 输出 数列…

自己动手写java虚拟机_自己动手写操作系统(要了解的知识点)

自己动手写操作系统(开篇)自己动手写操作系统(字符显示)说明:Intel 8086 或者不同的处理器,开机寄存器数据可能不一样,但是大致原理差不多了解过计算机启动的同学肯定知道,当计算机启动的时候 BIOS 会加载 MBR 数据 512 字节到 0x…

【PyAutoGUI操作指南】03 键盘控制功能+实现热键组合+ KEYBOARD_KEYS

4.1 write()函数 import pyautogui # 使用write()只能按单字符键,因此不能按Shift 或 F1键# 立即输入字符 pyautogui.write(Hello world!) # 依次输入字符,每个字符之间间隔0.25秒 pyautogui.write(Hello …

git入门基础

git基础 参考:官网git基础 git 文件的生命周期 文件的生命周期图: git中的文件可以分为4个阶段. Untracked : 这是目录中没有被跟踪的文件,即不在git项目中,使用 git commit 等命令对文件进行提交时不会提交这样的文件…

Android 充电LED控制

1、前言 充电LED灯控制是Android设备的基本功能,主要用于提示设备的电池状态,充电状态,满电状态,低电状态,很多手机厂商还使用呼吸效果来显示,普通的低端设备会使用两个LED灯表示,红灯表示充电…

【PyAutoGUI操作指南】04 消息框功能+Question+Waring+Critical+自定义消息框

PyAutoGUI利用PyMsgBox中的消息框函数提供跨平台的纯Python方式来显示JavaScript样式的消息框。 5.1 alert() import pyautoguipyautogui.alert(text这里写内容, title通知框标题位置, buttonOK)5.2 confirm() import pyautoguipyautogui.alert(text这…

js 弹出层的点击事件影响到底层的点击事件_聊一聊 Node.js 错误处理

个人博客:https://blog.skrskrskrskr.com错误分类软件程序中,我们可以将错误大致分为外部错误和内部错误两大类。外部错误是正确编写的程序在运行时产生的错误。它并不是程序本身的 bug,更多是一些外部原因导致的问题,比如请求超时…

spring-data-mongodb查询结果返回指定字段

方法1 DBObject dbObject new BasicDBObject(); dbObject.put("status", 1); DBObject fieldObject new BasicDBObject(); fieldObject.put("catalogName", true); fieldObject.put("_id", true); Query query new BasicQuery(dbObject, fiel…

老王带你理解算法复杂度O(1),O(N),O(N^2)

上图对应的是算法复杂度的图片,X轴对应的是n(问题规模),Y轴对应的是执行的运行时间。 我们先从简单的复杂度解读O(1) 从上面的图片我们可以看到O(1)的复杂度是恒定的,一点波澜都没有,什么是O(1)呢,就比如你是一个酒店…

【PyAutoGUI操作指南】05 屏幕截图与图像定位:截图+定位单个目标+定位全部目标+灰度匹配+像素匹配+获取屏幕截图中像素的RGB颜色

6 屏幕截图与图像定位 PyAutoGUI可以拍摄屏幕截图,将其保存到文件中,并在屏幕中定位图像。OSX使用操作系统附带的screencapture命令。Linux使用scrot命令,可以通过运行sudo-apt-get-install-scrot来安装该命令。 功能介绍:一个需…

C语言-数组a 和a 的区别

面试经典题目 #include "stdio.h"int main() {int a[5] { 1,2,3,4,5 };int *ptr (int *)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));/*getchar是用VS编写方便查看输出*/getchar();return 0; }请思考一下上面的输出结果,如果你非常自…

使用export/import导出和导入docker容器

1、导出容器如果要导出本地某个容器,可以使用 docker export 命令,导出容器快照到本地文件。$ sudo docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAM…

前端为什么有的接口明明是成功回调却执行了.catch失败回调_前端进阶高薪必看-手写源码篇(高频技术点)...

前言此系列作为笔者之前发过的前端高频面试整理的补充 会比较偏向中高前端面试问题 当然大家都是从新手一路走过来的 感兴趣的朋友们都可以看哈初衷我相信不少同学面试的时候最怕的一个环节就是手写代码 大家一定听过这句话talk is cheap, show me the code 没事 此文章不仅包含…

C/C++函数指针与指针函数

前面说的话 面试的时候,经常有面试官问这个问题,在Linux内核里面也是经常被使用的,在看很多大神的代码里面,我们也经常遇到函数指针与指针函数,一样,如果你自己没问题了,就不用往下看了。 定义…