问题标签 [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.
machine-learning - 如何在 PyTorch 中为 Soft-Actor-Critic 设置损失函数
我正在尝试为 PyTorch 中的软 Q-learning、actor-critic 策略梯度算法实现自定义损失函数。这来自以下论文Learning from Imperfect Demonstrations。该算法的结构类似于深度 q 学习,因为我们使用网络来估计 Q 值,并且我们使用目标网络来稳定结果。然而,与 DQN 不同,我们通过以下方式从 Q(s) 计算 V(s):
这很简单,可以使用 PyTorch 进行计算。我的主要问题与如何设置损失函数有关。部分更新方程表示为:
请注意,Q_hat 来自目标网络。我怎样才能将这样的东西放入损失函数中?我可以计算 V 和 Q 的值,但在这种情况下如何处理梯度?如果有人可以向我指出一个类似的例子,那将不胜感激。
pytorch - .grad() 在 pytorch 中返回 None
我正在尝试为参数估计编写一个简单的脚本(这里的参数是权重)。当 .grad() 返回 None 时,我遇到了问题。我也经历了这个 和这个链接,并在理论上和实践上理解了这个概念。对我来说,以下脚本应该可以工作,但不幸的是,它不起作用。
我的第一次尝试:以下脚本是我的第一次尝试
上面的代码抛出错误信息
element 0 of tensors does not require grad and does not have a grad_fn
在线loss.backward()
我的尝试 2:第一次尝试的改进如下:
现在脚本正在运行,但除了 pred.gred 其他两个返回 None。
我想在计算 loss.backward() 后更新所有参数并更新它们,但由于 None 没有发生。谁能建议我如何改进这个脚本?谢谢。
pytorch - 使用 autograd 计算输出相对于输入的雅可比矩阵
如果这个问题是显而易见的或微不足道的,我深表歉意。我对 pytorch 很陌生,我正在尝试了解 pytorch 中的 autograd.grad 函数。我有一个神经网络 G,它接受输入 (x,t) 和输出 (u,v)。G的代码如下:
或者简单地说 G(x,t) = (u(x,t), v(x,t)) 其中 u(x,t) 和 v(x,t) 是标量值。目标:计算 $\frac{\partial u(x,t)}{\partial x}$ 和 $\frac{\partial u(x,t)}{\partial t}$。在每个训练步骤,我都有一个大小为 100 美元的小批量,因此 u(x,t) 是一个 [100,1] 张量。这是我计算偏导数的尝试,其中 coords 是输入 (x,t),就像下面一样,我也将requires_grad_(True)
标志添加到 coords:
du 现在是 [100,2] 张量。 问题:这是小批量 100 个输入点的部分张量吗?
有类似的问题,例如计算输出相对于输入的导数,但我无法真正弄清楚发生了什么。如果这已经得到回答或微不足道,我再次道歉。非常感谢。
python - 使用 Autograd 进行数组分配(不再:()
我有一个相当重要的函数,我想区分它,autograd
但我还不够一个 numpy 向导来弄清楚我们如何在没有数组分配的情况下做到这一点。
我也很抱歉,为了能够独立运行,我不得不让这个例子难以置信地做作和毫无意义。我正在使用的实际代码是针对非线性有限元的,并且正在尝试为复杂的非线性系统计算雅可比。
我不太明白这条消息,因为没有发生类型错误。我认为它必须来自分配。
写完上面的内容后,我做了一个简单的切换,PyTorch
代码运行得很好。但我仍然更喜欢使用autograd
python - 如何在autograd中逐个元素分配方程
我正在尝试为非线性 PDE 实现基于 autograd 的求解器。与大多数 PDE 一样,我需要能够在输入向量的各个条目中进行操作,但显然这会破坏 autograd。我创建了这个简单的示例来展示我面临的问题:
以下代码有效:
以下代码不起作用:
我在几个地方读过你不能在 autograd 中分配元素。这真的是真的吗。有什么解决方法吗?或者也许另一个图书馆建议?
谢谢!
python - PyTorch 中的 autograd 微分示例 - 应该是 9/8?
在Python 的 Torch 教程示例中,他们使用下图:
因此,前向传球让我们知道:
在代码中,这看起来像:
但是,我对计算出的梯度感到困惑:
输出:
根据链式法则,do/dx = do/dz * dz/dy * dy/dx
,其中:
意思是:
但是,这与 Torch 返回的梯度 (9/2 = 4.5) 不匹配。也许我有一个数学错误(do/dz = 1/4 项?),或者我不明白autograd
Torch。
任何指针?
pytorch - PyTorch loss() 和反向传播是否理解 lambda 层?
我一直在使用此处提供的代码中的 resnet56 模型:https ://github.com/akamaster/pytorch_resnet_cifar10/blob/master/resnet.py 。
我注意到该实现与许多其他在线可用的 ResNet 示例不同,我想知道 PyTorch 使用 loss() 的反向传播算法是否可以解释提供的代码中的 lambda 层和快捷方式。
如果是这种情况,谁能提供有关 PyTorch 如何解释 lambda 层以进行反向传播的见解(即 PyTorch 如何知道如何区分层的操作)?
PS我还必须修改代码以适合我自己的用例,而且似乎我自己使用选项 == 'A' 的实现并没有产生很好的结果。这可能仅仅是因为 option == 'B' 使用卷积层而不是填充,更适合我的数据。
python-3.x - 雅可比矩阵:TypeError:“功能”对象不支持项目分配
我正在操作 autograd 库并计算向量函数 f 的雅可比矩阵,我想计算在点 x = (-1,0.2,0.3) 评估的雅可比矩阵
并向我抛出以下错误:
pytorch - 了解 pytorch autograd
我试图了解 pytorch autograd 的工作原理。如果我有函数 y = 2x 和 z = y**2,如果我进行正态微分,我得到 x = 1 处的 dz/dx 为 8 (dz/dx = dz/dy * dy/dx = 2y*2 = 2 (2x)*2 = 8x)。或者,z = (2x)**2 = 4x^2 和 dz/dx = 8x,所以在 x = 1 时,它是 8。
如果我对 pytorch autograd 做同样的事情,我会得到 4
哪个打印
我哪里错了?
pytorch - Pytorch 文档中的 Autograd 函数
在 Pytorch 文档https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#sphx-glr-beginner-blitz-autograd-tutorial-py 图像中,我无法理解 y.backward(v ) 表示以及为什么我们需要定义另一个张量 v 来进行反向操作以及我们如何获得 x.grad 的结果提前谢谢