torch.autograd
创始人
2024-03-22 16:28:40
0

torch.autograd

torch.autograd: 提供了类和函数,用来对任意的标量函数进行求导,要想使用自动 求导,只需要对已有的代码进行微小的改变,只需要将所有的tensor包含进VariableVariableVariable对象中即可。

  • torch.autograd.backward(variables, grad_variables, retain_variables=False)
    给定图的叶子节点VariableVariableVariable,计算图中变量的梯度和。

注意:我们需要在调用此函数之前将leaf variable的梯度置零叶子节点和Variable是两个概念,叶子节点是说用户创建的变量,可以保存梯度以进行反向传播;Variable只是对tensor的包装,当设置Variable的required_grad=True时,可以计算梯度,但如果不是叶子节点的话,在反向传播之前会释放梯度

参数说明

  • variables (variable 列表) – 被求微分的叶子节点,即 ys 。
  • grad_variables (Tensor 列表) – 对应variable的梯度。仅当variable不是标量且需要求梯度的时候使用
  • retain_variables (bool) – True,计算梯度时所需要的buffer在计算完梯度后不会被释放。如果想对一个子图多次求微分的话,需要设置为True

class torch.autograd.Variable

包装一个TensorTensorTensor,它同时保存着Variable的梯度和创建这个Variable的Function的引用。这个引用可以用来追溯创建这个Variable的整条链。如果Variable是用户创建的,那么它的creator是None,我们称这种对象为 leaf Variables。

由于autogradautogradautograd只支持标量的值反向求导,梯度的大小总是和数据的大小相匹配,同时,仅仅给leaf variable分配梯度,其他的Variable的梯度总为0.

变量

  • data 包含的Tensor。
  • grad 保存着Variable的梯度,这个属性是懒分配的,且不能被重新分配。
  • requires_grad 布尔值,指示这个Variable是否是被一个包含Variable的子图创建的,只能改变leafVariableleaf VariableleafVariable
  • creator 创建这个VariableVariableVariable的Function。对于leaf variable,这个属性为None。只读属性。这个属性其实是grad_fn,可能是官方文档上没有改正过来。下面提到creator我们都默认是grad_fn。

属性

在这里插入图片描述

Variable

Tensor张量

Variable变量

torch:两个基本对象:tensor:不能反向传播。Variable: 可以反向传播。

tensor的算术运算,和选取操作和numpy一样,一次你numpy相似的运算操作都可以迁移过来

variable是一种可以不断变化的变量,符合反向传播,参数更新的属性。pytorch的variable是一个存放会变化值的地理位置,里面的值会不停变化,像装糖果(糖果就是数据,即tensor)的盒子,糖果的数量不断变化。pytorch都是由tensor计算的,而tensor里面的参数是variable形式

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

  • requires_grad
    variable默认是不需要被求导的,即requires_grad属性默认为False,如果某一个节点的requires_grad为True,那么所有依赖它的节点requires_grad都为True
  • volatile
    variable的volatile属性默认为False,如果某一个variable的volatile属性被设为True,那么所有依赖它的节点volatile属性都为True。volatile属性为True的节点不会求导,volatile的优先级比requires_grad高。
  • retain_graph
    多次反向传播(多层监督)时,梯度是累加的。一般来说,单次反向传播后,计算图会free掉,也就是反向传播的中间缓存会被清空【这就是动态度的特点】。为进行多次反向传播需指定retain_graph=True来保存这些缓存
  • backward(grad_variables=None,retain_graph=None,create_graph=None)
    反向传播,求解Variable的梯度。放在中间缓存中。
  • grad_variable
    grad_variables是yyy求导时的梯度参数,由于autograd仅用于标量,因此当yyy不是标量且在声明时使用了requires_grad=True,必须指定grad_variables参数,在完成原始的反向传播之后得到的梯度会对这个grad_variables进行修正,然后将结果保存在Variable的grad中。grad_variables形状必须与Variable一致。在深度学习中求导与梯度有关,因此grad_variables一般会定义类似为[1, 0.1, 0.01, 0.001],表示梯度的方向,取较小的之不会对求导效率有影响。

相关内容

热门资讯

不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
报告实验.pdfbase.tt... 这个错误通常是由于找不到字体文件或者文件路径不正确导致的。以下是一些解决方法:确认字体文件是否存在:...
APK正在安装,但应用程序列表... 这个问题可能是由于以下原因导致的:应用程序安装的APK文件可能存在问题。设备上已经存在同名的应用程序...
安卓文字转语音tts没有声音 安卓文字转语音TTS没有声音的问题在应用中比较常见,通常是由于一些设置或者代码逻辑问题导致的。本文将...