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

python - 如何将张量附加到 PyTorch 计算图中的特定点?

如问题所述,我需要将张量附加到 Pytorch 计算图中的特定点。

我要做的是:在从所有小批量获取输出的同时,将它们累积在一个列表中,当一个时期结束时,计算平均值。然后,我需要根据平均值计算损失,因此反向传播必须考虑所有这些操作。

当训练数据不多时(无需分离和存储),我能够做到这一点。但是,当它变大时,这是不可能的。如果我不每次都分离输出张量,我的 GPU 内存就会用完,如果我分离,我会丢失计算图中输出张量的轨迹。看起来无论我有多少个 GPU,这都是不可能的,因为即使我分配了 4 个以上的 GPU,如果我在将它们保存到列表中之前不分离,PyTorch 只会使用前 4 个来存储输出张量。

非常感谢任何帮助。

谢谢。

0 投票
1 回答
1537 浏览

pytorch - Pytorch - 为什么预分配内存会导致“尝试第二次向后遍历图形”

假设我有一个简单的单层网络,我正在以典型的方式进行训练:

这可以按预期工作,但是如果我改为预先分配和更新输出数组,则会收到错误消息:

RuntimeError:试图第二次向后遍历图形,但缓冲区已被释放。第一次向后调用时指定retain_graph=True。

在第二个版本中 Pytorch 再次尝试向后遍历图表时发生了什么?为什么这在第一个版本中不是问题?(请注意,即使我不这样做也会发生此错误zero_grad()

0 投票
1 回答
65 浏览

python - 如何将 ndarray 转换为 GPU 格式的 autograd 变量?

我正在尝试做这样的事情,

data = torch.autograd.Variable(torch.from_numpy(nd_array))

它属于类型Variable[torch.FloatTensor],但我Variable[torch.cuda.FloatTensor]还需要我想这样做,pytorch version 0.3.0其中缺少一些方法,如to(device)set_default_device

0 投票
1 回答
592 浏览

python - 如何使用 autograd 查找 MIN/MAX 点

假设我们有一个简单的函数 y=sin(x**2),我如何使用 autograd 查找一阶导数值为 0 的所有 X:s?

0 投票
3 回答
15253 浏览

python - 评估 pytorch 模型:`with torch.no_grad` vs `model.eval()`

当我想在验证集上评估我的模型的性能时,是首选使用with torch.no_grad:还是model.eval()

0 投票
1 回答
1702 浏览

python - Pytorch:从矩阵元素的总和反向传播到叶变量

我试图更好地理解 pytorch 中的反向传播。我有一个代码片段,它成功地从输出 d 反向传播到叶变量 a,但是如果我添加一个重塑步骤,反向传播不再给输入一个梯度。

我知道 reshape 不合适,但我仍然不确定如何将其置于上下文中。

有什么想法吗?

谢谢。

0 投票
1 回答
1546 浏览

python-3.x - 如何计算 PyTorch 中所有输入的网络梯度 wrt 权重?

我试图弄清楚如何计算每个输入的网络梯度。我有点迷路了。本质上,我想要的是为输入 x 的所有值计算 d self.output/d weight1 和 d self.output/d weight2。因此,例如,我将有一个大小为 (1000, 5) 的矩阵。其中 1000 是输入 x 的大小,5 是层中权重的数量。

我在下面包含的示例将权重返回为大小 (1,5)。这里具体计算的是什么?这是 x 的 1 个输入的 d self.output/ d weight1,还是所有输入的平均值?

其次, features.grad 和 weight1.grad 的 matmul 是否与我要问的相同?x 的所有值的 weight1 的所有梯度的矩阵。

0 投票
0 回答
738 浏览

machine-learning - PyTorch 中的 torch.optim.SGD 结果为 NaN

我遵循本教程并尝试对其进行一些修改,以查看我是否理解正确。但是,当我尝试使用 torch.opim.SGD

,我的损失在第三次迭代时上升到 Inf ,然后到 nan ,这与手动更新它完全不同。手动更新它的代码如下(也在教程链接中)。

我想知道我的修改版本(第一个片段)有什么问题。当我用 Adam 替换 SGD 时,结果非常好(每次迭代后减少,没有 Inf 或 nan)。

0 投票
0 回答
618 浏览

profiling - 在 CUDA 模式下使用 torch autograd profiler 解释 CPU 和 GPU 时间

我正在尝试使用 torch.autograd.profiler 分析网络,我需要一些关于报告的 CPU 和 GPU 时间的解释。我假设时间几乎相等,因为 CPU 时间包括内核启动 + 执行的时间。但是,在尝试查找 CPU 和 GPU 时间之间的关系时,我发现不一致。

如下所示,有些操作报告的时间大致相同,有些操作报告的 CPU 时间大于 GPU 时间,有些报告的 CPU 时间小于 GPU 时间。有人可以解释一下时间上的差异。

  1. OpName CPUTime GPUTime
  2. relu 14.700us 15.936us
  3. 子 112.447us 93.504us
  4. 毫米 43.501us 46.912us
  5. CatBackward 84.912us 84.704us

谢谢

0 投票
1 回答
44 浏览

computer-vision - Inception_v3 的奇怪行为

我正在尝试基于预训练的 Inception_v3 创建一个生成网络。

1)我修复了模型中的所有权重

2) 创建一个大小为 (2, 3, 299, 299) 的变量

3) 创建大小为 (2, 1000) 的目标,我希望我的最终层激活通过优化变量变得尽可能接近。(我没有将batchsize设置为1,因为与VGG16不同,Inception_v3不采用batchsize=1,但这不是重点)。

以下代码应该可以工作,但给了我错误:«RuntimeError:梯度计算所需的变量之一已被就地操作修改»。

这很奇怪,因为如果我对 VGG16 做同样的事情,一切正常:

请帮忙。