自动微分
pytorch所有网络核心是autograde自动求导包。autograde.Variable是包的核心类,它包装了张量,并且几乎支持所有的操作。可以调用.backward()方法,然后所有的梯度计算会自动完成。注意的是,通过.data属性来访问原始的张量。
引用:{
Variable
和 Function
是相互联系的, 并且它们构建了一个非循环的图, 编码了一个完整的计算历史信息. 每一个 variable(变量)都有一个 .grad_fn
属性, 它引用了一个已经创建了 Variable
的 Function
(除了用户创建
的 Variable `` 之外 - 它们的 ``grad_fn is None
).
如果你想计算导数, 你可以在 Variable
上调用 .backward()
方法. 如果 Variable
是标量的形式(例如, 它包含一个元素数据), 你不必指定任何参数给 backward()
, 但是, 如果它有更多的元素. 你需要去指定一个 grad_output
参数, 该参数是一个匹配 shape(形状)的张量。
}
#coding=utf-8
import torch
from torch.autograd import Variable
x = Variable(torch.ones(2,2),requires_grad=True)
print x
y = x + 2
print y
z = y*y*3
print z
out = z.mean()
print out
out.backward()
print x.grad
结果:
Variable containing:
1 1
1 1
[torch.FloatTensor of size 2x2]
Variable containing:
3 3
3 3
[torch.FloatTensor of size 2x2]
Variable containing:
27 27
27 27
[torch.FloatTensor of size 2x2]
Variable containing:
27
[torch.FloatTensor of size 1]
Variable containing:
4.5000 4.5000
4.5000 4.5000
[torch.FloatTensor of size 2x2]