参考 Pytorch中的.backward()方法_deephub的博客-CSDN博客_.backward
0. requires_grad 的含义
- requires_gard 是Tensor变量的一个属性,一般默认为False。
- 如果对于某Variable 变量 x ,其
x.requires_grad == True
, 则表示它可以参与求导,也可以从它向后求导。 -
requires_grad == True
具有传递性:若x.requires_grad == True
,y.requires_grad == False
,z=f(x,y)
则,z.requires_grad == True
- 凡是参与运算的变量(包括 输入量,中间输出量,输出量,网络权重参数等),都可以设置 requires_grad。
1.backward 的使用
假设
我们将得到
但如果a和b是向量,那么下面的代码会报错
原因是,当我们调用张量的backward函数时,如果对非标量(即它的数据有不止一个元素)的张量求梯度,这个函数需要指定特定梯度。
这里F是非标量张量,所以我们要把梯度参数传递给和张量F维数相同的backward函数,即
得到
文章来源地址https://www.toymoban.com/news/detail-564089.html
2.backward 的理解
torch.autograd是一个计算向量-雅可比积的引擎。即给定任意向量v,计算其乘积 。
- @表示矩阵乘法
- 表示雅可比矩阵,即一个全偏导数的矩阵。考虑函数y,假定它有n维的输入向量x,有m维的输出。则
- 为backword函数提供的外梯度。
注:当输出张量为标量时,则v_vector的大小为1,即torch.tensor([1.]),可省略。当输出张量是非标量时,我们需要传递外部梯度向量 。
则对于上式 在 = [10.0, 10.0], =[20.0, 20.0], =[1. ,1.],我们得到 ∂/ ∂ :
到目前为止,我们有:
我们引入一个新的变量G,它依赖于F
我们检查一下的grad值也就是 grad,
并得到了警告,
在前向传播过程中,自动动态生成计算图。对于上面的代码示例,动态图如下:
从上面的计算图中,我们发现张量A和B是叶节点。我们可以用is_leaf来验证。
Torch backward() 仅在默认情况下累积叶子节点张量的梯度。因此,F grad没有值,因为F张量不是叶子节点张量。
为了积累非叶子节点的梯度,我们可以使用retain_grad方法如下:
文章来源:https://www.toymoban.com/news/detail-564089.html
到了这里,关于Pytorch中的.backward()方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!