pytorch能自动反向传播。 前向传播时,能够自动记录每个操作的拓扑顺序,反向传播时则可以自动反向传播。
Variable
Variable是一个类,对是对tensor的一个wrapper。
有三个属性.data
, .grad
和.creator
。(注意:新版的.creator
已经改成.grad_fn
了,这里不再说明。)如果是第一个运算节点,显然.creator
是空,.grad
只有调用.backward
时候才会有。
require_grad
可以指定某个variable是否计算其梯度。
import torch
from torch.autograd import Variable
x = Variable(torch.ones(2, 2), requires_grad=True)
print(x) # notice the "Variable containing" line
'''
Variable containing:
1 1
1 1
[torch.FloatTensor of size 2x2]
'''
y = x + 2
print(y)
'''
Variable containing:
3 3
3 3
[torch.FloatTensor of size 2x2]
'''
print(y.creator)
'''
<torch.autograd._functions.basic_ops.AddConstant object at 0x7fe6000cb4a8>
'''
z = y * y * 3
out = z.mean()
out.backward()
print(x.grad)
'''
Variable containing:
4.5000 4.5000
4.5000 4.5000
[torch.FloatTensor of size 2x2]
'''