详细内容或原文请订阅后点击阅览
介绍 torch autograd
使用 torch,几乎没有理由从头开始编写反向传播代码。它的自动微分功能称为 autograd,可跟踪需要计算梯度的操作以及如何计算它们。在这个由四部分组成的系列的第二篇文章中,我们更新了简单的手工编码网络以使用 autograd。
来源:RStudio AI博客上周,我们了解了如何从头开始编写一个简单的网络,只使用 torch 张量。预测、损失、梯度、权重更新——所有这些我们一直在自己计算。今天,我们做出了一个重大改变:也就是说,我们省去了繁琐的梯度计算,让 torch 为我们完成。
从头开始的简单网络torch
张量
torch
不过,在此之前,让我们先了解一些背景知识。
使用 autograd 自动微分
autogradtorch 使用一个名为 autograd 的模块来
torch
autograd
- 记录对张量执行的操作,并存储进入反向传播后需要执行的操作以获得相应的梯度。
记录对张量执行的操作,以及
存储进入反向传播后需要执行的操作以获得相应的梯度。
这些预期动作在内部存储为函数,当需要计算梯度时,这些函数按顺序应用:应用从输出节点开始,计算出的梯度依次通过网络传播回去。这是一种反向模式自动微分的形式。
传播 返回 反向模式自动微分Autograd 基础知识
Autograd作为用户,我们可以看到一些实现。作为此“记录”发生的先决条件,必须使用 require_grad = TRUE 创建张量。例如:
require_grad = TRUE
需要明确的是,x 现在是一个张量,必须根据该张量计算梯度 - 通常,该张量表示权重或偏差,而不是输入数据。如果我们随后对该张量执行某些操作,将结果分配给 y,
x
相对于哪个
y
我们发现 y 现在有一个非空的 grad_fn,它告诉 torch 如何计算 y 相对于 x 的梯度:
y
grad_fn
torch
y
x
MeanBackward0
MeanBackward0
计算
Backward()
Backward()
x
grad
y
x
火炬
x1