原文:
www.kdnuggets.com/2018/05/simple-derivatives-pytorch.html
使用 PyTorch 求导数很简单。像许多其他神经网络库一样,PyTorch 包含一个自动微分包 [autograd](https://pytorch.org/docs/master/autograd.html)
,它完成了繁重的工作。但在 PyTorch 中,导数的计算似乎尤其简单。
我希望在第一次学习如何将 导数和神经网络的实际应用结合起来时,有一些具体的例子,展示如何使用这样的神经网络包来找出简单的导数并进行计算,这些计算与神经网络中的计算图分开。PyTorch 的架构使得这种教学示例变得容易。
我不太确定这是否对那些想了解 PyTorch 如何实现自动微分、如何实际计算导数,甚至是学习“寻找导数”是什么意思的人有用,但我们还是试试看吧。也许这对这些人都没有帮助。 :)
首先,我们需要一个函数来找出导数。我们随意使用这个:
我们应该记住,函数的导数可以被解释为切线的斜率,以及函数的变化率。
在我们使用 PyTorch 找出这个函数的导数之前,让我们先手动计算一下:
上述是我们原始函数的 一阶导数。
现在让我们找出给定 x 值的导数函数值。我们随意使用 2:
对 x = 2 求导数函数的结果是 233。这可以解释为在公式中,当 x = 2 时,y 对 x 的变化率是 233。
使用 autograd
查找并求解导数
我们如何使用 PyTorch 的 autograd
包做与上面相同的事情?
首先,我们需要将原始函数在 Python 中表示为如下形式:
y = 5*x**4 + 3*x**3 + 7*x**2 + 9*x - 5
import torch
x = torch.autograd.Variable(torch.Tensor([2]),requires_grad=True)
y = 5*x**4 + 3*x**3 + 7*x**2 + 9*x - 5
y.backward()
x.grad
上述代码逐行解释:
-
导入 torch 库
-
定义我们想计算导数的函数
-
将我们想要计算其导数的值(2)定义为 PyTorch
Variable
对象,并指定它应以能够跟踪计算图中连接位置的方式进行实例化,以便通过链式法则 (requires_grad
) 执行微分。 -
使用
autograd
的[backward()](https://pytorch.org/docs/master/autograd.html#torch.autograd.backward)
计算梯度的总和,使用链式法则 -
输出 x 张量的
grad
属性中存储的值,如下所示
tensor([ 233.])
这个值 233 与我们上面手动计算的结果一致。
若要进一步使用 PyTorch,包括使用 autograd
包和 Tensor
对象构建一些基础神经网络,我建议查看官方的 PyTorch 60 分钟快速教程 或 这个教程。
相关:
-
PyTorch 张量基础
-
什么是张量?!?
-
提升你的数据科学技能。学习线性代数。
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织进行 IT 管理