自动微分
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]
本文详细介绍了PyTorch中自动微分的核心组件autograd及其使用方法。通过实例演示了如何利用autograd.Variable进行张量操作并自动计算梯度。
1541

被折叠的 条评论
为什么被折叠?



