问题标签 [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 - RuntimeError:尝试第二次向后退,但缓冲区已被释放
我一直遇到这个错误:
RuntimeError:试图第二次向后遍历图形,但缓冲区已被释放。第一次向后调用时指定retain_graph=True。
我在 Pytorch 论坛中搜索过,但仍然无法找出我在自定义损失函数中做错了什么。我的模型是 nn.GRU,这是我的自定义损失函数:
培训代码:
python - 如何使用 AutoGrad 包?
我正在尝试做一件简单的事情:使用 autograd 获取梯度并进行梯度下降:
在获得输入-输出对的损失后,我想获得梯度损失:
但是库教程没有展示如何获得关于a或b的梯度,即参数so,autograd和tangent都没有。
python - Python 类型错误:转换和更改数据类型不起作用
我编写了一个机器学习模型,其中导数是使用 autograd 库计算的。
发生的事情是我收到此错误:
我尝试了什么:
我尝试将输入数组设置为 float64,仍然得到相同的错误。
我尝试在 for 循环中将 x 转换为 float(x) ,但仍然得到相同的错误。
仍然无法弄清楚如何解决错误并运行代码?谢谢你的帮助。
python - 可变大小输入的小批量训练
我有一个 LongTensors 列表和另一个标签列表。我是 PyTorch 和 RNN 的新手,所以我对如何为我拥有的数据实施小批量训练感到很困惑。这些数据还有很多,但我想保持简单,所以我只能理解如何实现小批量训练部分。我正在根据在可变长度输入上训练的 LSTM/GRU 的最终隐藏状态进行多类分类。我设法让它与批量大小 1(基本上是 SGD)一起工作,但我正在努力实现小批量。
我是否必须将序列填充到最大尺寸并创建一个更大尺寸的新张量矩阵来容纳所有元素?我的意思是这样的:
这是对自定义数据进行小批量培训的公认方式吗?我找不到任何关于使用 DataLoader 加载自定义数据的教程(但我认为这是使用 pyTorch 创建批次的方法?)
我的另一个疑问是关于填充。我使用 LSTM/GRU 的原因是输入的长度可变。填充不会破坏目的吗?小批量训练需要填充吗?
deep-learning - PyTorch 中的自定义损失函数不会最小化
我正在使用 PyTorch 代码在无监督设置中训练自定义损失函数。但是,在训练阶段,损失不会下降并且在可能的时期内保持不变。请参阅下面的训练代码片段:
O/P:
0 5.8993988037109375
25 5.8993988037109375
50 5.8993988037109375
75 5.8993988037109375
100 5.8993988037109375
我在培训中遗漏了什么吗?我跟着这个例子/教程。在这方面的任何帮助和指示将不胜感激。
mathematical-optimization - 如何在pytorch中手动应用渐变
开始学习 pytorch 并尝试做一些非常简单的事情,尝试将随机初始化的大小为 5 的向量移动到值 [1,2,3,4,5] 的目标向量。
但是我的距离并没有减少!!我的矢量x
简直发疯了。不知道我错过了什么。
python - PyTorch - autograd 变量的修改
在我的 PyTorch 程序中,我有一个在运行时不断更新的矩阵。
我想知道如何执行此更新。我尝试使用这样的东西:
matrix
和都是hidden
autograd 变量。使用上面的示例时,我收到以下错误消息:
我想知道如何解决这个问题并在不使用就地操作的情况下执行更新。
可能切片矩阵并使用 torch.cat 创建一个新矩阵会起作用,但这似乎不是一个很好的解决方案。
有没有更好的方法来做到这一点?
提前致谢!
python - 将 HIPS autograd 与 numpy.piecewise 一起使用时出现神秘错误(ValueError: setting an array element with a sequence。)
我想在 Python 2.7(在 Jupyter 笔记本中)中使用 HIPS autograd(https://github.com/HIPS/autograd)来查找参数x。我的前向模型(在给定时间点t作为参数x的函数的观察)是t的分段函数。因此,我选择使用 autograd.numpy.piecewise 函数。我的损失(或目标)函数是一个直接的均方误差。我无法使用 autograd.grad 计算自动渐变。
下面的简单代码示例:
我得到的完整错误是:
我相信这与 numpy.piecewise 的 funclist 参数有关。当我将前向模型(以便所有函数都不依赖于 x)更改为
错误消失了。有任何想法吗?谢谢!
python-3.x - PyTorch 运行自定义损失函数
我正在尝试通过扩展 nn.Module 来使用自定义损失函数,但我无法克服错误
变量的元素 0 不需要 grad 并且没有 grad_fn
注意:我的标签是大小列表:num_samples,但每个批次在整个批次中都具有相同的标签,因此我们通过调用将整个批次的标签缩小为单个标签.diag()
我的代码如下,基于迁移学习教程:
我的损失函数定义如下:
然后我运行以下命令来运行模型:
我试图让它与其他损失函数一起使用,但无济于事。loss.backward()
被调用时我总是得到同样的错误。
我的理解是,loss.backward
如果我扩展nn.Module
.
python - 避免在 autograd 中分配数组
我从autograd
教程中了解到,当数组包含在要区分的目标中时,不支持数组分配。但是,我目前在我的代码中有以下目标函数,我想对 theta 进行区分:
通常我可以通过对 theta 上的计算进行矢量化来避免 for 循环;但是,在这种情况下,计算已经涉及给定特定行的 theta(作为超参数)的各种线性代数运算(逆运算等),并且我发现很难对所有 theta 行的运算进行矢量化。在这种情况下,我不知道有比用 for 循环逐行填充 res 数组更好的方法。
我尝试了一种天真的方法,通过创建一个列表来避免数组分配,并在每次迭代时将结果附加到该列表,然后最终在返回 res 时将列表转换为数组,但我最终得到全零梯度......
我想知道此设置中的一般推荐解决方案是什么?