问题标签 [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 回答
3385 浏览

pytorch - torch.autograd.grad 中的 grad_outputs (CrossEntropyLoss)

我试图得到d(loss)/d(input). 我知道我有两个选择。

第一个选项:

第二种选择:

我的问题是:如果我使用交叉熵损失,我应该grad_outputs在第二个选项中传递什么?

我放d(CE)/d(y_hat)吗?由于 pytorch 交叉熵包含 softmax,这将需要我使用 Kronecker delta 预先计算 softmax 导数。

还是我放d(CE)/d(CE)哪个是torch.ones_like?

一个概念性的答案很好。

0 投票
1 回答
252 浏览

python - 无法使用 pytorch 优化功能

我正在尝试为结构方程模型编写估计器。所以基本上我从模型的随机参数开始Bgamma, phi_diag, psi。并使用它计算隐含的协方差矩阵sigma。我的优化函数f_ml是根据数据的sigma和 协方差矩阵计算的S。这是我的计算代码:

我正在尝试进行优化:

我面临的问题是我的参数值在优化期间没有更新。我试着稍微调试一下这个问题,我注意到在优化的第一个循环中,梯度得到了计算,但参数的值没有得到更新。这是一个使用 pdb 的示例(在 for 循环之后设置断点):

我不知道我在做什么错。有任何想法吗?

0 投票
1 回答
3059 浏览

python - 提高 autograd jacobian 的性能

我想知道以下代码如何更快。目前,它似乎慢得不合理,我怀疑我可能错误地使用了 autograd API。我期望的输出是timeline在 f 的 jacobian 处评估的每个元素,我确实得到了,但这需要很长时间:

我期望以下内容:

  1. jacobian(f)返回一个表示梯度向量 wrt 参数的函数。
  2. jacobian(f)(np.array([1.0, 1.0]))是在点 (1, 1) 评估的雅可比行列式。对我来说,这应该像一个向量化的 numpy 函数,所以它应该执行得非常快,即使对于 40k 长度的数组也是如此。然而,这不是正在发生的事情。

即使像下面这样的东西也有同样糟糕的表现:

0 投票
2 回答
4400 浏览

python-3.x - 如何包装 PyTorch 函数并实现 autograd?

我正在阅读有关定义新的 autograd 函数的 PyTorch 教程。我要实现的 autograd 函数是torch.nn.functional.max_pool1d. 这是我到目前为止所拥有的:

我的问题是:如何获得包装函数的渐变?我知道考虑到我提供的示例非常简单,可能还有其他方法可以做到这一点,但我想做的事情适合这个框架并且需要我实现一个autograd函数。

编辑:在检查了这篇博文后,我决定尝试以下方法backward

添加output到保存的变量中。然后我运行以下代码:

我明白了Bus error: 10

xTis tensor([[[ 1.69533562, -0.21779421, 2.28693953, -0.86688095, -1.01033497]]], dtype=torch.float64),那么我希望在调用之后找到它(xT.grad即 包含)。tensor([[[ 3.39067124, -0. , 9.14775812, -0. , -2.02066994]]], dtype=torch.float64)s.backward()2*x*grad_of_max_poolgrad_of_max_pooltensor([[[1., 0., 2., 0., 1.]]], dtype=torch.float64)

我已经弄清楚为什么我得到一个Bus error: 10. 上面的代码似乎导致了 my backwardat的递归调用grad_input = output.backward(grad_output)。所以我需要找到其他方法来获得max_pool1d. 我知道如何在纯 Python 中实现这一点,但结果会比我可以包装库代码要慢得多。

0 投票
1 回答
262 浏览

python - 是否可以使用 Autograd 计算神经网络输出相对于其输入之一的导数?

我有一个神经网络模型,它为大约 9 个输入 X 输出大小约为 4000 的向量 Y。我需要计算 Y 输出与输入 X_1 或 X_2 中的一个或两个的偏导数。

我已经有了这些导数,并且我已经为 X_1 和 X_2 训练了两个不同的神经网络。它做得很好,但问题是导数不如计算 Y 的神经网络准确。

我希望有一种方法可以从最终/优化的神经网络计算输出向量 Y 到 X 中的一个输入的导数,这样我就不需要为导数训练两个额外的神经网络。

有没有办法用 autograd 做到这一点?

0 投票
1 回答
660 浏览

pytorch - 激活梯度惩罚

这是一个简单的神经网络,我试图惩罚激活梯度的范数:

但是,它不会产生所需的正则化效果。如果我对权重(而不是激活)做同样的事情,效果很好。我做对了吗(就pytorch机器而言)?具体来说,在 grad_norm.backward() 调用中会发生什么?我只想确保更新权重梯度,而不是激活梯度。目前,当我在该行之前和之后打印出权重和激活的梯度时,两者都会发生变化 - 所以我不确定发生了什么。

0 投票
1 回答
17498 浏览

pytorch - Autograd.grad() for Tensor in pytorch

0 投票
1 回答
4380 浏览

python - 使用 autograd.grad() 作为损失函数的参数(pytorch)

我想计算网络中两个张量之间的梯度。输入 X 张量通过一组卷积层发送,这些卷积层返回并输出 Y 张量。

我正在创建一个新的损失,我想知道 X 的每个元素的 norm(Y) 梯度之间的 MSE。这里的代码:

不幸的是,我一直在用 torch.autograd.grad() 进行测试,但我不知道该怎么做。我收到以下错误:RuntimeError: One of the differentiated Tensors appears to not have been used in the graph. Set allow_unused=True if this is the desired behavior.

设置allow_unused=True让我回来None,这不是一个选择。不确定如何计算梯度和范数之间的损失。关于如何编码这种损失的任何想法?

0 投票
1 回答
199 浏览

python - pytorch 是否对其计算图进行急切修剪?

这是一个非常简单的例子:

这将打印,

因为,当然,对于 z 为零的条目,ds/dx 为零。

我的问题是:pytorch 是否智能并在达到零时停止计算?还是实际上做计算“ 2*5”,只是为了以后做“ 10 * 0 = 0”?

在这个简单的例子中,它并没有太大的区别,但是在我正在研究的(更大的)问题中,这会有所作为。

感谢您的任何意见。

0 投票
1 回答
395 浏览

python-2.7 - autograd.hessian_vector_product 和 scipy.optimize.NonlinearConstraint 的问题

我正在尝试使用 运行最小化问题scipy.optimize,包括NonlinearConstraint. 我真的不想自己编写衍生代码,所以我习惯autograd这样做。但即使我对 tominimize和 to的参数遵循完全相同的程序NonlinearConstraint,第一个似乎有效,第二个无效。

这是我的 MWE:

当我useconstraint关闭(在顶部)时,它工作正常并按(0, 0)预期最小化。当我打开它时,我收到以下错误:

我究竟做错了什么?我认为问题出在hessian_vector_product因为我hess在错误消息中看到,但我不确定。