问题标签 [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.
python - 如何将张量附加到 PyTorch 计算图中的特定点?
如问题所述,我需要将张量附加到 Pytorch 计算图中的特定点。
我要做的是:在从所有小批量获取输出的同时,将它们累积在一个列表中,当一个时期结束时,计算平均值。然后,我需要根据平均值计算损失,因此反向传播必须考虑所有这些操作。
当训练数据不多时(无需分离和存储),我能够做到这一点。但是,当它变大时,这是不可能的。如果我不每次都分离输出张量,我的 GPU 内存就会用完,如果我分离,我会丢失计算图中输出张量的轨迹。看起来无论我有多少个 GPU,这都是不可能的,因为即使我分配了 4 个以上的 GPU,如果我在将它们保存到列表中之前不分离,PyTorch 只会使用前 4 个来存储输出张量。
非常感谢任何帮助。
谢谢。
pytorch - Pytorch - 为什么预分配内存会导致“尝试第二次向后遍历图形”
假设我有一个简单的单层网络,我正在以典型的方式进行训练:
这可以按预期工作,但是如果我改为预先分配和更新输出数组,则会收到错误消息:
RuntimeError:试图第二次向后遍历图形,但缓冲区已被释放。第一次向后调用时指定retain_graph=True。
在第二个版本中 Pytorch 再次尝试向后遍历图表时发生了什么?为什么这在第一个版本中不是问题?(请注意,即使我不这样做也会发生此错误zero_grad()
)
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
python - 如何使用 autograd 查找 MIN/MAX 点
假设我们有一个简单的函数 y=sin(x**2),我如何使用 autograd 查找一阶导数值为 0 的所有 X:s?
python - 评估 pytorch 模型:`with torch.no_grad` vs `model.eval()`
当我想在验证集上评估我的模型的性能时,是首选使用with torch.no_grad:
还是model.eval()
?
python - Pytorch:从矩阵元素的总和反向传播到叶变量
我试图更好地理解 pytorch 中的反向传播。我有一个代码片段,它成功地从输出 d 反向传播到叶变量 a,但是如果我添加一个重塑步骤,反向传播不再给输入一个梯度。
我知道 reshape 不合适,但我仍然不确定如何将其置于上下文中。
有什么想法吗?
谢谢。
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 的所有梯度的矩阵。
machine-learning - PyTorch 中的 torch.optim.SGD 结果为 NaN
我遵循本教程并尝试对其进行一些修改,以查看我是否理解正确。但是,当我尝试使用 torch.opim.SGD
,我的损失在第三次迭代时上升到 Inf ,然后到 nan ,这与手动更新它完全不同。手动更新它的代码如下(也在教程链接中)。
我想知道我的修改版本(第一个片段)有什么问题。当我用 Adam 替换 SGD 时,结果非常好(每次迭代后减少,没有 Inf 或 nan)。
profiling - 在 CUDA 模式下使用 torch autograd profiler 解释 CPU 和 GPU 时间
我正在尝试使用 torch.autograd.profiler 分析网络,我需要一些关于报告的 CPU 和 GPU 时间的解释。我假设时间几乎相等,因为 CPU 时间包括内核启动 + 执行的时间。但是,在尝试查找 CPU 和 GPU 时间之间的关系时,我发现不一致。
如下所示,有些操作报告的时间大致相同,有些操作报告的 CPU 时间大于 GPU 时间,有些报告的 CPU 时间小于 GPU 时间。有人可以解释一下时间上的差异。
- OpName CPUTime GPUTime
- relu 14.700us 15.936us
- 子 112.447us 93.504us
- 毫米 43.501us 46.912us
- CatBackward 84.912us 84.704us
谢谢
computer-vision - Inception_v3 的奇怪行为
我正在尝试基于预训练的 Inception_v3 创建一个生成网络。
1)我修复了模型中的所有权重
2) 创建一个大小为 (2, 3, 299, 299) 的变量
3) 创建大小为 (2, 1000) 的目标,我希望我的最终层激活通过优化变量变得尽可能接近。(我没有将batchsize设置为1,因为与VGG16不同,Inception_v3不采用batchsize=1,但这不是重点)。
以下代码应该可以工作,但给了我错误:«RuntimeError:梯度计算所需的变量之一已被就地操作修改»。
这很奇怪,因为如果我对 VGG16 做同样的事情,一切正常:
请帮忙。