The title of your publication挨打

Page 154

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

torch.autograd.backward(variables, grad_variables, retain_variables=False) Computes the sum of gradients of given variables w.r.t. graph leaves. 给定图的叶子节点 variables, 计算图 中变量的梯度和。 计算图可以通过链式法则求导。如果 variables 中的任何一个 variable 是 非标量 (non-scalar)的,且 requires_grad=True。那么此函数需要指定 grad_variables,它的长度应该和 variables 的长度匹配,里面保存了相关 variable 的梯度(对于不需要 gradient tensor 的 variable,None 是可取的)。 此函数累积 leaf variables 计算的梯度。你可能需要在调用此函数之前将 leaf variable 的梯度置零。 参数说明:

 variables (variable 列表) – 被求微分的叶子节点,即 ys 。  grad_variables (Tensor 列表) – 对应 variable 的梯度。仅当 variable 不是标量且需要求梯度的时候使 用。

 retain_variables (bool) – True,计算梯度时所需要的 buffer 在计算完梯度后不会被释放。如果想对一个 子图多次求微分的话,需要设置为 True。

Variable API 兼容性 Variable API 几 乎 和 Tensor API 一 致 ( 除 了 一 些 in-place 方 法 , 这 些 in-place 方 法 会 修 改 required_grad=True 的 input 的值)。多数情况下,将 Tensor 替换为 Variable,代码一样会正常的工作。 由于这个原因,我们不会列出 Variable 的所有方法,你可以通过 torch.Tensor 的文档来获取相关知识。

In-place operations on Variables 在 autograd 中支持 in-place operations 是非常困难的。同时在很多情况下,我们阻止使用 in-place operations。Autograd 的贪婪的 释放 buffer 和 复用使得它效率非常高。只有在非常少的情况下,使用 in-place operations 可以降低内存的使用。除非你面临很大的内存压力,否则不要使用 in-place operations。

In-place 正确性检查 所有的 Variable 都会记录用在他们身上的 in-place operations。如果 pytorch 检测到 variable 在一个 Function 中已经被保存用来 backward,但是之后它又被 in-place operations 修改。当这种情况发生时, 在 backward 的时候,pytorch 就会报错。这种机制保证了,如果你用了 in-place operations,但是在 backward 过程中没有报错,那么梯度的计算就是正确的。

class torch.autograd.Variable [source] 包装一个 Tensor,并记录用在它身上的 operations。 Variable 是 Tensor 对象的一个 thin wrapper,它同时保存着 Variable 的梯度和创建这个 Variable 的 Function 的引用。这个引用可以用来追溯创建这个 Variable 的整条链。如果 Variable 是被用户所创建 的,那么它的 creator 是 None,我们称这种对象为 leaf Variables。 由于 autograd 只支持标量值的反向求导(即:y 是标量),梯度的大小总是和数据的大小匹配。同时, 仅仅给 leaf variables 分配梯度,其他 Variable 的梯度总是为 0. 变量:

 data – 包含的 Tensor  grad – 保存着 Variable 的梯度。这个属性是懒分配的,且不能被重新分配。


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.