问题标签 [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 投票
2 回答
16741 浏览

python - PyTorch autograd -- 只能为标量输出隐式创建 grad

我正在使用该autograd工具PyTorch,并且发现自己处于需要通过整数索引访问一维张量中的值的情况。像这样的东西:

我收到以下错误消息:

一般来说,我对如何使用变量的克隆版本应该如何在梯度计算中保留该变量持怀疑态度。变量本身实际上并未用于计算A,因此当您调用 时A.backward(),它不应该是该操作的一部分。

感谢您对这种方法的帮助,或者是否有更好的方法来避免丢失梯度历史并仍然通过 1D 张量索引requires_grad=True

**编辑(9 月 15 日):**

res是一个包含 1 到 5 平方值的零维张量列表。为了连接一个包含 [1.0, 4.0, ..., 25.0] 的张量,我更改return Variable(torch.FloatTensor(res))torch.stack(res, dim=0),这会产生tensor([ 1., 4., 9., 16., 25.], grad_fn=<StackBackward>).

但是,我收到了这个由A.backward()线路引起的新错误。

0 投票
1 回答
950 浏览

scipy - 将 Autograd ArrayBox 转换为 BigFloat

正如标题中所说,我想从 Autograd ArrayBox 转换为 BigFloat。

我的功能很简单:

我需要高精度,因此我想使用bigfloat包。现在,这个函数是一个更复杂的函数的一部分,我正在使用scipy.optimize.minimize函数来找到函数的最小值,同时也autograd用于逼近雅可比矩阵和黑森矩阵。我运行代码时遇到的错误是

所以我的问题是:如何从 Autograd 的 ArrayBox 转换为 BigFloat?如何正确提取 ArrayBox 内的值?

0 投票
1 回答
607 浏览

python - 查找 scipy.stat.norm.pdf(x) 的梯度时出现 Autograd 类型错误

我想在 Python 中使用 autograd 找到带有 scipy.stats.norm 的正态分布 pdf 的简单梯度。

但是,我得到了这个打字错误:

抱歉代码超载。我不知道这可能有什么问题。据我所知,autograd支持scipy.stats.norm.pdf()/cdf()/logpdf()/logcdf()的梯度,如代码 https://github.com/HIPS/autograd/所示blob/master/autograd/scipy/stats/norm.py

0 投票
1 回答
3113 浏览

pytorch - pyTorch 可以在不设置 retain_graph=True 的情况下向后退两次

pyTorch 教程中所示,

如果您甚至想在图形的某些部分上进行两次后退,则需要在第一次通过时传入retain_graph = True。

但是,我发现以下代码片段实际上没有这样做。我正在使用 pyTorch-0.4

输出:

谁能解释一下?提前致谢!

0 投票
1 回答
965 浏览

python - PyTorch - 被覆盖的变量是否留在图中?

我想知道 Python 变量被覆盖的 PyTorch 张量是否仍保留在 PyTorch 的计算图中。


所以这是一个小例子,我有一个 RNN 模型,其中隐藏状态(和其他一些变量)在每次迭代后被重置,backward()稍后调用。

例子:


所以我的问题是:

  • 在调用之前覆盖隐藏状态是否有问题backward()

  • 或者计算图是否将先前迭代的隐藏状态的必要信息保留在内存中以计算梯度?

  • 编辑:如果有官方消息来源的声明会很棒。例如,声明所有与 CG 相关的变量都被保留 - 无论是否还有其他针对该变量的 python 引用。我假设图表本身中有一个引用阻止垃圾收集器删除它。但我想知道这是否真的如此。

提前致谢!

0 投票
1 回答
1000 浏览

python - 火炬。当最终张量中包含多个值时可以使用 autograd 吗?

当最终张量中包含多个值时可以使用 autograd 吗?

我尝试了以下。

引发错误

然而,以下工作。

输出如下

我是否在这里遗漏了什么,或者我可以继续假设 autograd 仅在最终张量中具有单个值时才有效?

0 投票
2 回答
876 浏览

python - 更新 PyTorch 中的特定向量元素

我有一个想要更新的大向量。我将通过向向量中的特定元素添加偏移量来更新它。我指定了一个要更新的索引向量(称为索引向量ix),并且对于每个索引,我指定一个要添加到该元素的值(称为值向量vals)。如果索引向量的所有条目都是唯一的,那么以下代码就足够了:

但是,如果 中有重复的索引,这将不起作用ix。对于重复索引的情况,一种简单的方法如下:

但这不能很好地扩展 - 很大时非常慢ix。有没有更快的方法来做到这一点?vals如果有一种快速的方法来汇总具有相同索引的所有条目ix,那么解决方案应该很容易。

更新:
我找到了一种效果很好的解决方案,如下所述。我仍然希望获得更好的解决方案的反馈。

0 投票
1 回答
104 浏览

computer-vision - 关于pyorch中的autograd,添加新的用户自定义层,我应该如何更新它的参数?

每个人 !

我的需求是产生光流的问题。我有两个原始图像和一个光流数据作为ground truth,现在我的算法是使用原始图像生成光流,生成光流和ground truth之间的欧几里德距离可以定义为损失值,所以它可以实现一个反向传播以更新参数。

我把它当作一个回归问题,我现在必须思考:

我可以将每个参数设置为 (required_grad = true),并计算损失,然后我可以 loss.backward() 来获取梯度,但我不知道如何在优化器中添加这些参数来更新这些参数。

我把我的算法写成一个模型。如果我设计一个“自定义”模型,我可以在 def init() 中初始化多个层,例如 nn.Con2d()、nn.Linear(),并且可以在 (torch.optim.Adam(model.parameters) 等方法中更新参数())),但是如果我自己定义新的层,我应该如何在更新参数集合时添加这个层的参数???

这个问题困扰了我好几天。有没有什么好的方法来更新用户定义的参数?如果您能给我一些建议,我将不胜感激!

0 投票
1 回答
2055 浏览

python - 如何解决“无法区分 wrt 类型" 在 python 中使用 autograd 时出错

在 python 中使用 autograd 函数时出现错误“无法区分 wrt 类型”。

基本上,我正在尝试为广义线性模型(GLM)编写代码,并且我想使用 autograd 来获得一个函数,该函数描述了损失函数相对于 w(权重)的导数,然后我将其插入 scipy .optimize.minimize()。

在执行 scipy 步骤之前,我一直在尝试通过输入变量的值(在我的例子中是数组)并打印梯度的值(再次作为数组)作为输出来测试我的函数是否有效。这是我的代码:

所以当我这样做时,一切都运行良好,直到最后一行,我得到前面提到的错误。

我显然不明白如何很好地使用 autograd,而且我必须以错误的格式放置一些东西,因为错误似乎与数据类型不匹配有关。任何帮助将不胜感激!

0 投票
2 回答
304 浏览

complexity-theory - 如何计算自动微分的计算复杂度?

我正在使用 Pytorch 中实现的自动网格来训练神经网络,我需要计算整个算法的计算复杂度。我在哪里可以找到 autograd 计算复杂度的完整计算?我在 Pytorch 文档中进行了搜索,但没有找到任何答案。谢谢