gpt4 book ai didi

解决torch.autograd.backward中的参数问题

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章解决torch.autograd.backward中的参数问题由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

torch.autograd.backward(variables, grad_variables=None, retain_graph=None, create_graph=False) 。

给定图的叶子节点variables, 计算图中变量的梯度和。 计算图可以通过链式法则求导。如果variables中的任何一个variable是 非标量(non-scalar)的,且requires_grad=True。那么此函数需要指定grad_variables,它的长度应该和variables的长度匹配,里面保存了相关variable的梯度(对于不需要gradient tensor的variable,None是可取的).

此函数累积leaf variables计算的梯度。你可能需要在调用此函数之前将leaf variable的梯度置零.

参数:

variables(变量的序列) - 被求微分的叶子节点,即 ys .

grad_variables((张量,变量)的序列或无) - 对应variable的梯度。仅当variable不是标量且需要求梯度的时候使用.

retain_graph(bool,可选) - 如果为False,则用于释放计算grad的图。请注意,在几乎所有情况下,没有必要将此选项设置为True,通常可以以更有效的方式解决。默认值为create_graph的值.

create_graph(bool,可选) - 如果为True,则将构造派生图,允许计算更高阶的派生产品。默认为False.

我这里举一个官方的例子 。

?
1
2
3
4
5
6
7
8
import torch
from torch.autograd import Variable
x = Variable(torch.ones( 2 , 2 ), requires_grad = True )
y = x + 2
z = y * y * 3
out = z.mean()
out.backward() #这里是默认情况,相当于out.backward(torch.Tensor([1.0]))
print (x.grad)

输出结果是 。

?
1
2
3
4
Variable containing:
  4.5000 4.5000
  4.5000 4.5000
[torch.FloatTensor of size 2x2 ]

解决torch.autograd.backward中的参数问题

接着我们继续 。

?
1
2
3
4
5
6
7
8
9
10
x = torch.randn( 3 )
x = Variable(x, requires_grad = True )
 
y = x * 2
while y.data.norm() < 1000 :
   y = y * 2
 
gradients = torch.FloatTensor([ 0.1 , 1.0 , 0.0001 ])
y.backward(gradients)
print (x.grad)

输出结果是 。

?
1
2
3
4
5
Variable containing:
  204.8000
  2048.0000
   0.2048
[torch.FloatTensor of size 3 ]

这里这个gradients为什么要是[0.1, 1.0, 0.0001]?

如果输出的多个loss权重不同的话,例如有三个loss,一个是x loss,一个是y loss,一个是class loss。那么很明显的不可能所有loss对结果影响程度都一样,他们之间应该有一个比例。那么比例这里指的就是[0.1, 1.0, 0.0001],这个问题中的loss对应的就是上面说的y,那么这里的输出就很好理解了dy/dx=0.1*dy1/dx+1.0*dy2/dx+0.0001*dy3/dx.

如有问题,希望大家指正,谢谢_.

以上这篇解决torch.autograd.backward中的参数问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/qq_17550379/article/details/78939046 。

最后此篇关于解决torch.autograd.backward中的参数问题的文章就讲到这里了,如果你想了解更多关于解决torch.autograd.backward中的参数问题的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com