【PyTorch官方教程中文版学习笔记01】PyTorch 自动微分


autograd 包是 PyTorch 中所有神经网络的核心。首先让我们简要地介绍它,然后我们将会去训练

我们的第一个神经网络。该 autograd 软件包为 Tensors 上的所有操作提供自动微分。它是一个由
运行定义的框架,这意味着以代码运行方式定义你的后向传播,并且每次迭代都可以不同。我们
从 tensor 和 gradients 来举一些例子。

""代表结果
#代表解释

1. Tensor

torch.Tensor 是包的核心类。如果将其属性 .requires_grad 设置为 True,则会开始跟踪针对 tensor
的所有操作。完成计算后,您可以调用 .backward() 来自动计算所有梯度。该张量的梯度将累积到
.grad 属性中。

    import torch    #创建一个张量,设置 requires_grad=True 来跟踪与它相关的计算
    x = torch.ones(2, 2, requires_grad=True)
    print(x)
    "输出:tensor([[1., 1.],[1., 1.]], requires_grad=True)"
    y = x + 2 #针对张量做一个操作
    print(y)
    "tensor([[3., 3.],[3., 3.]], grad_fn=)"# y作为操作的结果被创建,所以它有 grad_fn
    print(y.grad_fn)
    ""
    #.requires_grad_( … ) 会改变张量的 requires_grad 标记。输入的标记默认为 False ,如果没有提供
#相应的参数

2. Gradients 

我们现在后向传播,因为输出包含了一个标量,out.backward() 等同于
out.backward(torch.tensor(1.))。

z = y * y * 3
out = z.mean()
print(z, out)
out.backward()
print(x.grad)
"tensor([[4.5000, 4.5000],[4.5000, 4.5000]])"
#y=x+2,z=3/4*(x+2)^2,z对x求导后为3/2*(x+2).带入x=1,为4.5