学习利用PyTorch做自然语言处理(3)-自动梯度

2019-12-05  本文已影响0人  公输昊少

本文介绍了有关梯度的定义及用PyTorch自动求梯度的方法。

1.梯度的定义

假设函数f: \mathbb{R}^n \rightarrow \mathbb{R}的输入是一个n维向量x = [x_1, x_2, \ldots, x_n]^\top,输出是标量。函数f(x)有关x的梯度是一个由n个偏导数组成的向量:

image

2.PyTorch自动求梯度

PyTorch中求梯度非常简单,只要在定义一个张量时,将其requires_grad参数指定为True,那么之后该张量经过一些操作后得到的标量就可以求导了,自然也可以得出梯度。
例如,我们定义一个2×2的,元素都为1.的张量。

import torch
x = torch.ones(2, 2, requires_grad=True)

这里要注意,如果想要自动求导,那么张量的元素只能为浮点数,否则会报如下图所示的错误。

image
然后我们对x进行一些操作后得到一个标量z
y = x * x * 3
z = y.mean()

那么我们就可以对z求导了:

z.backward()

z关于x的梯度就是:

x.grad

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://ywsun.site/articles/ptnlp_3.html

上一篇下一篇

猜你喜欢

热点阅读