在上一篇博客已经对Pytorch的Tensor进行了快速介绍,本章将继续学习autograd包。autograd包是PyTorch所有神经网络的核心,为Tensors上的所有操作提供了自动区分。同时,它也是一个逐个运行的框架,意味着backprop由代码运行定义,每一次迭代都可以不同,下面进行一一介绍autograd包中的变量和梯度。
1.变量
autograd.Variable
是包的中央类,包含一个张量,并支持几乎所有定义的操作,在完成计算后,调用.backward()
并自动计算所有梯度。可以通过.data
属性访问原始张量,而将此变量的梯度累加到.grad
;还有一个类对于autograd实现非常重要 - a Function
。
Variable
与Function
互连并建立一个非循环图,编码完整的计算历史。 每个变量都有一个.grad_fn
属性,它引用了一个已经创建了Variable
的Function
(除了用户创建的变量代替creator is None
)。
如果要计算导数,可以在变量上调用.backward()
。 如果Variable
是一个标量(即它包含一个元素数据),则不需要为backward()
指定任何参数,但是如果它有更多元素,则需要指定一个grad_output
参数,该参数是匹配形状的张量。
导入autograd包及Variable
import torch
from torch.autogra