- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我无法对以下函数求二阶导数。当我想要关于 u_s 的二阶导数时,它可以工作,但对于 x_s ,它不起作用。
有人知道我在这里做错了什么吗?
def cost(xt, x_goal, u, Q, R):
return (xt - x_goal).matmul(Q).matmul((xt - x_goal).transpose(0,1)) + u.matmul(R).matmul(u)
x_s = tr.tensor([ 0.0000, -1.0000, 0.0000], dtype=torch.float64, requires_grad=True)
u_s = tr.tensor([-0.2749], dtype=torch.float64, requires_grad=True)
c = cost(x_s, x_Goal, u_s, tr.tensor(Q), tr.tensor(R))
c
output:
tensor([[4.0076]], dtype=torch.float64, grad_fn=<ThAddBackward>)
Cu = grad(c, u_s, create_graph=True)[0]
Cu
output:
tensor([-0.0550], dtype=torch.float64, grad_fn=<ThAddBackward>)
Cuu = grad(Cu, u_s, allow_unused=True)[0]
Cuu
output:
tensor([0.2000], dtype=torch.float64)
Cux = grad(Cu, x_s, allow_unused=True)
Cux
output:
(None,)
我猜测 Cu 本身完全独立于 x_s,但是导数至少应该为零,而不是 None!
最佳答案
你没有做错任何事。
假设我有变量 x
、y
和 z=f(y)
。如果我计算 z.backward(),然后尝试询问相对于 x 的梯度,我会得到 None
。例如,
import torch
x = torch.randn(1,requires_grad=True)
y = torch.randn(1,requires_grad=True)
z = y**2
z.backward()
print(y.grad) # Outputs some non-zero tensor
print(x.grad) # None
那么这与您尝试计算二阶导数 Cux
有什么关系?当您编写 create_graph=True
时,PyTorch 会跟踪计算 Cu
的导数计算中的所有操作,并且由于导数本身由原始操作组成,因此您可以计算梯度的梯度,就像你正在做的那样。这里的问题是梯度 Cu
永远不会遇到变量 x_s
,因此实际上是 Cu = f(u_s)
。这意味着,当您执行 Cu.backward()
时,Cu
的计算图永远不会看到变量 x_s
,因此它的渐变类型仍然是 None
,就像上面的示例一样。
关于deep-learning - Pytorch 二阶导数返回 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56397270/
在做 Ch06 的练习 6.5 时 |在 Middlebrook 博士的 D-OA 方法中,我尝试制作传递函数的波德图: bodeplot[s/100+100/s*(1+10/s)](wolframa
我正在尝试做这样的事情 编辑 - 整个查询。 SELECT * FROM ride WHERE ( SELECT COUNT(*) FROM ( SELECT DISTINCT
我尝试求解简单的数值方程 - 没有源的线性波动方程:utt = v2 uxx 其中 v - 波速。 我使用初始条件: u(x, 0) = sin(x) ux(x, 0) = -v * sin(x) 对
我正在尝试使用 C++ 求解 4 个二阶多项式方程组。解决该系统的最快方法是什么?如果可能,您能否链接或编写一些伪代码来解释它?我知道涉及 Groebners 基础或 QR 分解的解决方案,但我找不到
我在 Checkmarx 中遇到错误。 Method abortJob at line 209 of XXX/classes/Monitoring.cls gets user inputfrom th
对于二阶 ODE(python 中的 dopri5 方法),下面的代码总是会导致错误:C:\Users\MY\Anaconda3\lib\site-packages\scipy\integrate\_
重要更新:我已经找到答案并将它们放在这个简单的开源库中:http://bartolsthoorn.github.com/NVDSP/检查一下,如果您在 IOS 中遇到音频过滤器问题,它可能会为您节省不
我是一名优秀的程序员,十分优秀!