torch.autograd

torch.autograd

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

  • torch.autograd.backward(variables, grad_variables, retain_variables=False)
    给定图的叶子节点 V a r i a b l e Variable Variable,计算图中变量的梯度和。

注意:我们需要在调用此函数之前将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

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

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

变量

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

属性

torch.autograd_第1张图片

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是 y y y求导时的梯度参数,由于autograd仅用于标量,因此当 y y y不是标量且在声明时使用了requires_grad=True,必须指定grad_variables参数,在完成原始的反向传播之后得到的梯度会对这个grad_variables进行修正,然后将结果保存在Variable的grad中。grad_variables形状必须与Variable一致。在深度学习中求导与梯度有关,因此grad_variables一般会定义类似为[1, 0.1, 0.01, 0.001],表示梯度的方向,取较小的之不会对求导效率有影响。

你可能感兴趣的:(模块复现,深度学习,人工智能,python)