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

python - 如何在 Pytorch 中实现收缩自动编码器?

我正在尝试contractive autoencoder在 Pytorch 中创建一个。我找到了这个线程并根据它进行了尝试。这是我根据提到的线程编写的片段:

为了简洁起见,我只为编码器和解码器使用了一层。显然,无论其中任何一个的层数如何,它都应该起作用!

但这里的问题是,除了我不知道这是否是这样做的正确方法(计算相对于输入的梯度)之外,我得到一个错误,这使得前一个解决方案错误/不适用。

那是:

imgs.grad.requires_grad = True

产生错误:

AttributeError:“NoneType”对象没有属性“requires_grad”

我还尝试了该线程中建议的第二种方法,如下所示:

但我面临错误:

我应该如何在 Pytorch 中解决这个问题?

0 投票
1 回答
380 浏览

tensorflow - pytorch 中的 tf.function 属性

我是 pytorch 的初学者,我有一些需要在网络中实现的功能。

我的问题是:有没有像tf.function这样的方法,或者我应该使用带有变量的“class(nn.Module)”?

例如,设 X 为 10x2 矩阵。在伪代码中:

0 投票
0 回答
119 浏览

python - 使用 autograd 进行优化

我有一个连续值数据集 {input, target}。输入 (x) 维度为 224,目标 (y) 维度为 1。y 的值介于 (0,1) 之间。只有大约 1000 个数据点。我的目标是最大化函数,y = f(x)(假设它存在),即找到 x 的值(这个 x 可能不存在于给定的数据集中)以产生更接近 1 的 y。什么是最好的方法去做这个?

我的想法是首先训练一个神经网络来适应数据。然后使用 autograd 特征在输入处得到 df/dx,为 x 引导梯度下降路径,即使用神经网络作为也可以产生梯度的黑盒。输出错误为 (1-y)。我缺乏必要的关键字来搜索这种时尚的解决方案。这是一种可行的方法吗?其他可用的方法是什么?

0 投票
0 回答
218 浏览

pytorch - 使用 pytorch 内置导数作为自定义 autograd 函数的一部分

我正在寻找实现自定义 autograd。向后传递的函数是自定义函数和torch应该能够自行找到的函数的导数的混合。

举个简单的例子,假设我想为 y = x * exp(x) 创建一个函数

如何在反向传递中调用已知 pytorch 函数的导数?

0 投票
1 回答
4856 浏览

tensorflow - Pytorch Autograd:运行时错误“只能为标量输出隐式创建grad”是什么意思

我正在尝试深入了解 Pytorch autograd;我想在通过如下 sigmoid 函数后观察一个简单张量的梯度:

我的目标是获得 D.grad() 但即使在调用它之前我也得到了运行时错误:

我看到另一篇有类似问题的帖子,但那里的答案不适用于我的问题。谢谢

0 投票
1 回答
24 浏览

torch - 梯度流在组合模型上停止

我遇到了一个梯度不能在组合网络上反向传播的问题。我检查了很多答案,但找不到这个问题的相关解决方案。如果我们能解决这个问题,我将不胜感激。

我想在这段代码中计算输入数据的梯度:

但我得到了错误:

我的模型是一个组合模型,我从两个预训练模型中加载了参数。我检查了模型权重的 requires_grad state-dict,这是真的,但是,模型权重的梯度是 None。是因为我加载了导致梯度块的状态字典吗?

我该如何处理这个问题?

模型结构如下:

0 投票
1 回答
687 浏览

python - 通过torch.ge取导数,或者如何在pytorch中显式定义导数

我正在尝试建立一个网络,其中一层从实数映射到 {0, 1}(即使输出二进制)。

我试过的

虽然我能够找到它torch.ge提供了这样的功能,但每当我想训练在网络 PyTorch 中断之前发生的任何参数时。

我也一直在尝试寻找 PyTorch/autograd 中是否有任何方法可以手动覆盖模块的派生。更具体地说,在这个原因中,我只想通过 torch.ge 传递导数,而不改变它。

最小的例子

这是我制作的一个最小示例,它使用 PyTorch 中的典型神经网络训练结构。

我遇到的

当我运行上面的代码时,会发生以下错误:

这个错误是有道理的,因为torch.ge函数是不可微的。但是,由于MaxPool2D也是不可微的,我相信有一些方法可以减轻 PyTorch 中的不可微性。

如果有人可以向我指出任何可以帮助我为自定义模块实现自己的反向传播或任何避免此错误消息的方式的来源,那就太好了。

谢谢!

0 投票
1 回答
2416 浏览

python - 损失函数中的所有变量都必须是 pytorch 中的 grads 张量吗?

我有以下功能

我想知道,Pytorch 中的 autograd 是否正常工作,因为ys并且ts没有grad标志。

所以我的问题是:在工作FPE,FNE,ys,ts,n_1,n_0之前,所有变量 () 都必须是张量optimizer.step()吗,还是只有最终函数 ( loss) 是

0 投票
1 回答
256 浏览

python - Autograd 打破 np.empty_like

我正在尝试采用函数的梯度,在该函数中我单独分配 numpy 数组元素(将局部力分配给 FEA 中的全局力向量),但这似乎破坏了 Autograd——如果我使用np.zeros全局数组我得到ValueError: setting an array element with a sequence, 而如果我使用np.empty我得到NotImplementedError: VJP of empty_like wrt argnums (0,) not defined.

例子:

给出错误:

有没有办法在按元素组装的 numpy 数组上使用 Autograd?

0 投票
1 回答
1652 浏览

python - 非常简单的 optim.SGD 训练循环无法按预期工作 - PyTorch

我一直在阅读 PyTorch 文档,并且一直在尝试找出 MSELoss 和 autograd。我尝试创建一个非常简单的训练循环,该循环采用两个随机张量并更新每个张量中的值,以便将所有值tensor1的总和加上所有值的总和加上tensor2某个目标数。在我的示例中,我使用了 100。以下是我的实现方式:

训练循环之前和训练循环之后的张量总和是相同的,但我应该看到总和增加并接近 100。我不确定我在这里缺少什么。我认为这可能与我的优化器有关,因为训练循环几乎直接来自文档示例。我是 PyTorch 的新手,感谢任何帮助!