问题标签 [autograd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2922 浏览

python - 访问 autograd arraybox 值

我正在尝试使用 python 包 autograd 并且我想在插值中使用 autograd 数组框的值

其中 y_values 存储在 autograd 数组框中。这会导致错误

这与 y_values 是一个 autograd 数组框有关。我不明白为什么会出现此错误,因为我认为 autograd 应该与 numpy 一起使用?但是,如果我可以将 autograd arraybox 转换为 numpy 数组,我可以使用它,但这似乎也不起作用?

导致

0 投票
1 回答
523 浏览

deep-learning - Pytorch 二阶导数返回无

我无法对以下函数进行二阶导数。当我想要关于 u_s 的二阶导数时,它可以工作,但对于 x_s 它不起作用。

有谁知道我在这里做错了什么?

我猜 Cu 本身完全独立于 x_s,但是导数至少应该为零,而不是无!

0 投票
1 回答
534 浏览

pytorch - 如何在 PyTorch 中计算幂函数 wrt 指数的梯度?

我正在尝试计算的梯度

关于阿尔法。

到目前为止,我尝试了以下方法:

但是这门课一直nan在训练我的网络。我希望看到类似的东西,grad=out*torch.log(x)但无法做到。例如,此代码不返回任何内容:

autograd也没有运气尝试使用它。我应该如何解决这个问题?谢谢。

0 投票
1 回答
782 浏览

pytorch - PyTorch 总 CUDA 时间

Autograd Profiler 是一个方便的工具,用于测量 PyTorch 中的执行时间,如下所示:

输出如下所示:

这将包括许多行。我的问题是:

1) 如何使用 autograd profiler 获取整个 CUDA 时间?(即,CUDA 时间列的总和)

2)有什么解决方案可以务实地使用它吗?例如,prof[0].CUDA_Time

0 投票
3 回答
48010 浏览

python - PyTorch 中“detach()”和“with torch.nograd()”的区别?

我知道从梯度计算中排除计算元素的两种方法backward

方法一:使用with torch.no_grad()

方法二:使用.detach()

这两者有区别吗?两者都有好处/缺点吗?

0 投票
1 回答
72 浏览

python - 在损失函数中点张量时不存在 pytorch 梯度

出于本 MWE 的目的,我正在尝试使用具有多个项的自定义损失函数来拟合线性回归。然而,当我试图通过用我的损失点一个权重向量来对我的损失函数中的不同项进行加权时,我遇到了奇怪的行为。只需将损失相加即可按预期工作;然而,当点权重和损失时,反向传播会以某种方式被破坏并且损失函数不会减少。

我已经尝试在两个张量上启用和禁用 requires_grad,但无法复制预期的行为。

预期结果:损失函数减小,线性回归拟合(见下面的输出)

实际结果:损失函数没有变化

我很困惑为什么这么简单的操作会破坏反向传播梯度,如果有人对为什么这不起作用有一些见解,我会非常感激。

0 投票
1 回答
197 浏览

python - 使用 gridsampler 进行 PyTorch 图像转换,优化网格时的奇怪行为

我试图让每像素转换以使一个图像(+背景)适合结果。 背景图像+输入图像应转换为所需的结果

为了实现这一点,我使用 PyTorch gridsampler 和 autograd 来优化网格。转换后的输入将添加到未更改的背景中。

结果如下:

它实际上正在使用这个简单的示例,但我观察到一些奇怪的行为。网格刚刚开始在一侧发生变化。为什么会这样,为什么整个网格不会立即改变?我缺少一些明显的部分吗?

0 投票
1 回答
65 浏览

python - 通过一些转换定义参数或保留子图,但不是整个图

我遇到了一个我以前从未见过的问题。我从事贝叶斯机器学习工作,因此大量使用 PyTorch 中的分布。一件常见的事情是根据参数的对数定义分布的一些参数,以便在优化时它们不能变为负数(例如,正态分布的标准偏差)。

然而,为了独立于分布,我不想手动重新计算此参数的转换。通过示例进行演示:

以下代码将不会运行。在第一次反向传递之后,计算参数指数的部分图形被自动删除,而不是重新添加。

下一组代码将运行,但我必须明确引用log_std循环中的参数,并重新创建分布。如果我想改变分布类型,不考虑具体情况是不可能的。

然而,第一个示例在 Tensorflow 中确实有效,因为那里的图表是静态的。有人对我如何解决这个问题有一些想法吗?如果可以只保留定义关系的图形部分,std = torch.exp(log_std)那么这可以工作。我也尝试过使用反向梯度挂钩,但不幸​​的是,要正确计算新梯度,您需要访问参数值和学习率。

提前致谢!迈克尔

编辑

我被问到一个我可能想如何改变分布的例子。获取当前不起作用的代码,并将分布更改为 Gamma 分布:

但是查看当前有效的代码:

您会看到我们必须更改循环内的代码以允许算法工作。在这个小例子中它不是一个大问题,但这只是对更大的算法的一个演示,在这种情况下不必担心会非常有益

0 投票
1 回答
170 浏览

python - 在具有自定义数据类型的 python 包装的 C 函数上使用 autograd

autograd 原则上可以在 python 包装的 C 函数上工作吗?

我想区分的 C 函数需要REAL8数据类型的参数,我可以通过给它一个或参数来成功地在 python 中调用它。floatnp.float64

用我的调试器仔细检查后,我发现当 autograd 将or更改为 ArrayBox对象时,当它尝试评估渐变时,我得到了一个TypeError 。floatnp.float64

有没有办法让 autograd 在这种情况下继续进行?

是否有其他策略可能更适合我的情况?

我可以编写任何原语来解决这个问题吗?

背景:

Bilby 是一个较新的 python 库,它包装了用 C 编写的旧代码(LALSIMULATION)。它提供了广泛的预编码引力波模型,我想在我的研究中使用这些预编码模型。我的首要任务是弄清楚如何计算这些模型的准确 Hessian 和梯度。由于其臭名昭著的数值准确性,我想使用自动微分来解决这个问题,但我被卡住了。

SimInspiralChooseFDWaveform 是第一次调用 C 代码以供参考。

0 投票
1 回答
532 浏览

gpu - 将参数分配给 GPU 将 is_leaf 设置为 false

如果我在 PyTorch 中创建一个Parameter,那么它会自动分配为一个叶变量:

这打印出来True。据我了解,如果x是叶变量,那么它将由优化器更新。

但是,如果我再分配x给 GPU:

这打印出来False。所以现在我无法分配x给 GPU 并将其保留为叶节点。

为什么会这样?