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],表示梯度的方向,取较小的之不会对求导效率有影响。

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...