- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找通过 Pytorch 获取函数雅可比行列式的最有效方法,到目前为止已提出以下解决方案:
# Setup
def func(X):
return torch.stack((X.pow(2).sum(1),
X.pow(3).sum(1),
X.pow(4).sum(1)),1)
X = Variable(torch.ones(1,int(1e5))*2.00094, requires_grad=True).cuda()
# Solution 1:
t = time()
Y = func(X)
J = torch.zeros(3, int(1e5))
for i in range(3):
J[i] = grad(Y[0][i], X, create_graph=True, retain_graph=True, allow_unused=True)[0]
print(time()-t)
>>> Output: 0.002 s
# Solution 2:
def Jacobian(f,X):
X_batch = Variable(X.repeat(3,1), requires_grad=True)
f(X_batch).backward(torch.eye(3).cuda(), retain_graph=True)
return X_batch.grad
t = time()
J2 = Jacobian(func,X)
print(time()-t)
>>> Output: 0.001 s
由于在第一个解决方案中使用循环与在第二个解决方案中使用循环似乎没有太大区别,我想问是否还有更快的方法在 pytorch 中计算雅可比行列式。
我的另一个问题也是关于计算 Hessian 矩阵的最有效方法是什么。
最后,有谁知道在 TensorFlow 中是否可以更轻松或更高效地完成类似的事情?
最佳答案
functorch
可以进一步加快计算速度。例如,此代码来自 functorch
docs用于批量雅可比计算(Hessian 也适用):
batch_size = 64
Din = 31
Dout = 33
weight = torch.randn(Dout, Din)
print(f"weight shape = {weight.shape}")
bias = torch.randn(Dout)
def predict(weight, bias, x):
return F.linear(x, weight, bias).tanh()
x = torch.randn(batch_size, Din)
compute_batch_jacobian = vmap(jacrev(predict, argnums=2), in_dims=(None, None, 0))
batch_jacobian0 = compute_batch_jacobian(weight, bias, x)
关于python - PyTorch 最高效的 Jacobian/Hessian 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56480578/
我正在使用 scipy.optimize.minimize 进行优化,并尝试使用以下方法:“Newton-CG”、“dogleg”和“trust-ncg”。据我了解,对于这些方法,需要目标函数的雅可比
我正在尝试对任意多个链接的串行链进行逆运动学。 如下paper ,我找到了如何计算雅可比矩阵的示例。 Entry (i, j) = v[j] * (s[i] - p[j]) 地点: v[j] is t
我想知道下面的代码如何才能更快。目前,它似乎慢得不合理,我怀疑我可能错误地使用了 autograd API。我期望的输出是 timeline 的每个元素在 f 的 jacobian 中求值,我确实得到
当使用 lsqcurvefit 执行非线性最小二乘法拟合时,将 Jacobian 作为输出(即 [x,resnorm,residual,exitflag,output,lambda,jacobian]
我正在尝试计算 (x,y)=(0,0) 处的雅可比行列式,但无法这样做。 import sympy as sp from sympy import * import numpy as np x,y=s
我正在尝试定义一个 custom gradient in TensorFlow对于返回非标量的函数。 问题的简化玩具版本是: import tensorflow as tf @tf.custom_gr
我正在寻找通过 Pytorch 获取函数雅可比行列式的最有效方法,到目前为止已提出以下解决方案: # Setup def func(X): return torch.stack((X.pow(
我打算在 MCMC 例程中使用 Boost odeint 库来估计 ODE 模型中的参数。由于这些 ODE 可能是刚性的,我需要能够将雅可比矩阵传递到具有导数的求解器中。我想创建一个类,它具有作为私有
我正在 Dymola(基于 modelica 的商业软件)中运行系统模型。模型是关于强制对流下多孔物质的传热和传质。我提出这个问题的问题是关于模型模拟过程中产生的错误。 使用模型的当前设置,可以在给定
我正在尝试实现显示的示例 here . 但是当运行代码并使用 Debug模式时,没有返回值。我假设我没有使用正确的旋转轴。 额外的 Unity 细节: Joints 变量是一个游戏对象数组(由 4 个
import math from scipy.optimize import fsolve def sigma(s, Bpu): return s - math.sin(s) - mat
我目前正在使用 SciPy.optimize 中的最小化 (BFGS) 函数来校准我的模型。校准后,参数会不时受到轻微扰动,我想重新使用之前校准的 Jacobian 和 IHessian 作为我的初始
在 scipy.optimize.root 的文档中对于 method = lm,以下是 options 关键字的默认值。 options={'col_deriv': 0, 'diag': None,
有没有办法让 scipy.optimize.minimize 在每次迭代时打印估计梯度的值?我想将它与我正在计算的分析梯度值进行比较。 最佳答案 您可以为 scipy.optimize.minimiz
我正在尝试用 Python 制作 Newton - CG 优化。我的函数是 f(x,y) =(1-x)^2 + 2(y-x^2)^2。初始点:x = 3,y = 2。这是我的代码: from scip
我正在尝试使用 OpenGL、Eigen3 和 "Jacobian pseudoinverse" 实现简单的反向运动学测试方法。 系统使用“Jacobian transpose”算法运行良好,但是,一
我试图了解“dogleg”方法在 Python 的 scipy.optimize.minimize 中是如何工作的功能。我正在调整帮助页面底部的示例。 根据注释,dogleg 方法需要 Jacobia
在 R 中,当您仅提供优化问题的目标函数和约束时,是否可以通过分析找到雅可比/海森/稀疏模式? AMPL 可以做到这一点,据我所知,即使是 MATLAB 也可以做到这一点,但我不知道您是否需要 Kni
我是一名优秀的程序员,十分优秀!