- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
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
]
|
接着我们继续 。
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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
在PyTorch实现中,autograd会随着用户的操作,记录生成当前variable的所有操作,并由此建立一个有向无环图。用户每进行一个操作,相应的计算图就会发生改变。 更底层的实现中,图中记录
torch.autograd.backward(variables, grad_variables=None, retain_graph=None, create_graph=False) 给定图
每当我调用 autograds backward 时,我的脚本永远不会终止。 backward 本身不是阻塞的,它之后的所有行仍然被执行,脚本只是没有终止。似乎后台有某种工作线程挂起,但我找不到任何相
我试图了解 pytorch autograd 的工作原理。如果我有函数 y = 2x 和 z = y**2,如果我进行正常微分,我会在 x = 1 处得到 dz/dx 作为 8 (dz/dx = dz
如果这个问题很明显或微不足道,我深表歉意。我对 pytorch 很陌生,我想了解 pytorch 中的 autograd.grad 函数。我有一个神经网络 G,它接受输入 (x,t) 和输出 (u,v
尝试了解渐变的表示方式以及 autograd 的工作原理: import torch from torch.autograd import Variable x = Variable(torch.Te
我试图了解 pytorch autograd 的工作原理。如果我有函数 y = 2x 和 z = y**2,如果我进行正常微分,我会在 x = 1 处得到 dz/dx 作为 8 (dz/dx = dz
我正在尝试做一件简单的事情:使用 autograd 获取梯度并进行梯度下降: import tangent def model(x): return a*x + b def loss(x,y)
我正在构建一个用于强化学习的多模型神经网络,其中包括一个 Action 网络、一个世界模型网络和一个评论家。这个想法是训练世界模型根据来自 Action 网络的输入和之前的状态来模拟你试图掌握的任何模
我有一个接受多变量参数 x 的函数。这里 x = [x1,x2,x3]。假设我的函数看起来像:f(x,T) = np.dot(x,T) + np.exp(np.dot(x,T) 其中 T 是常数。 我
我只是想知道,PyTorch 如何跟踪张量上的操作(在 .requires_grad 设置为 True 之后它如何自动计算梯度。请帮助我理解 autograd 背后的想法。谢谢。 最佳答案 这是个好问
将 pytorch 的 autograd 与 joblib 混合使用似乎存在问题。我需要为很多样本并行获取梯度。 Joblib 在 pytorch 的其他方面工作得很好,但是,当与 autograd
我正在研究“使用 fastai 和 Pytorch 为编码人员进行深度学习”。第 4 章通过一个简单的例子介绍了 PyTorch 库中的 autograd 函数。 x = tensor([3.,4.,
在我之前的 question我找到了如何使用 PyTorch 的 autograd 进行区分。它起作用了: #autograd import torch from torch.autograd imp
执行 backward在 Pytorch 中,我们可以使用可选参数 y.backward(v)计算雅可比矩阵乘以 v : x = torch.randn(3, requires_grad=True)
我明白 autograd用于暗示自动微分。但究竟是什么tape-based autograd在 Pytorch以及为什么有这么多的讨论肯定或否定它。 例如: this In pytorch, ther
我加载 features和 labels从我的训练数据集中。它们最初都是 numpy 数组,但我使用 torch.from _numpy(features.copy()) 将它们更改为火炬张量和 to
我将此作为问题提交给 cycleGAN pytorch implementation , 但由于那里没有人回复我,我会在这里再问一次。 我主要对在一次反向传球之前调用多次正向传球这一事实感到困惑,请参
我正在使用 pytorch 来计算逻辑回归的损失(我知道 pytorch 可以自动执行此操作,但我必须自己制作)。我的函数定义如下,但转换为 torch.tensor 会破坏 autograd 并给出
我想知道下面的代码如何才能更快。目前,它似乎慢得不合理,我怀疑我可能错误地使用了 autograd API。我期望的输出是 timeline 的每个元素在 f 的 jacobian 中求值,我确实得到
我是一名优秀的程序员,十分优秀!