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