问题标签 [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 - 在 Python 中实现 Adagrad
我正在尝试在 Python 中实现 Adagrad。出于学习目的,我以矩阵分解为例。我会使用Autograd来计算梯度。
我的主要问题是实施是否良好。
问题描述
给定一个包含一些缺失条目的矩阵 A (M x N),分解为 W 和 H,分别具有 (M xk) 和 (k XN) 大小。目标是使用 Adagrad 学习 W 和 H。我将按照本指南进行 Autograd 实施。
注意:我非常清楚基于 ALS 的实施非常适合。我仅将 Adagrad 用于学习目的
习惯进口
创建要分解的矩阵
屏蔽一个条目
定义成本函数
分解参数
成本 wrt 参数 W 和 H 的梯度
主要的 Adagrad 例程(需要检查)
当问题收敛并且我得到一个合理的解决方案时,我想知道实施是否正确。具体来说,如果理解梯度和然后计算自适应学习率是否正确?
torch - pytorch 自定义层“不是模块子类”
我是 PyTorch 的新手,在使用了一段时间的不同工具包后尝试了一下。
我想了解如何对自定义层和功能进行编程。作为一个简单的测试,我写了这个:
这旨在使通过它的数据总和为1。实际上没有用,只是在测试中。
然后我将它插入到 PyTorch Playground 的示例代码中:
结果是错误!
也许这需要是一个函数而不是一个模块?也不清楚功能,模块之间有什么区别。
例如,为什么一个 Function 需要一个backward()
,即使它完全由标准 pytorch 原语构造而成,而一个 Module 不需要这个?
python - 导数计算器 Autograd 的问题
我正在使用 Autograd,这是一个区分功能的 numpy 包装器。输出是 $f^\prime$。一个例子是tanh_prime = grad(np.tanh)
返回 tanh 的一阶导数。
每当我将grad
调用的输出应用于数组时,都会出现异常。例如,当一个电话grad(np.tanh)(np.arange(5))
,我得到
异常字符串中的那个数组是梯度,但我不能存储它,因为它是异常的一部分。此外,为什么要调用异常,因为np.tanh
是标量值函数?
python - 大批量反向传播中的 CUDNN 错误
我实现了 MLP、RNN、CNN 的组合。批量大小为 420 时,一切似乎都运行良好(也就是我没有收到任何错误)。但是,一旦我将批次增加到 840,我就会收到以下错误:
向前传球似乎工作正常。我检查所有变量是否连续并且它们是连续的。此外,我对损失计算的预测和目标是连续的,而且返回的损失也是连续的。但是随后在调用时会发生此错误backward()
。任何想法为什么会发生这种情况?
CUDA 版本 8.0.61
Python 3.5.2
评论摘要:
- 一个序列中有 210 张图像,因此,我的批量大小为 210 步。每个图像的形状为
[3, 250, 250]
. - 我正在向后使用 PyTorch,我自己还没有实现任何向后的方法。
theano - pytorch:如何直接找到梯度wrt损失
在 theano 中,很容易获得给定损失的某个变量的梯度:
我知道 pytorch 采用了不同的范式,您可以在其中执行以下操作:
问题是我可能不想通过图形进行完全的反向传播——只是沿着到达 w 所需的路径。
requires_grad=False
我知道如果您不想通过变量反向传播,您可以定义变量。但是你必须在创建变量时决定(并且requires_grad=False
属性附加到变量,而不是获取梯度的调用,这看起来很奇怪)。
我的问题是是否有某种方法可以按需反向传播(即仅沿着计算所需的路径反向传播dl_dw
,就像在 theano 中那样)?
python - 使用 Autograd 的偏导数
我有一个接受多元参数 x 的函数。这里 x = [x1,x2,x3]。假设我的函数看起来像: f(x,T) = np.dot(x,T) + np.exp(np.dot(x,T) 其中 T 是一个常数。
我有兴趣找到 df/dx1、df/dx2 和 df/dx3 函数。
我使用 scipy diff 取得了一些成功,但我有点怀疑,因为它使用了数值差异。昨天,我的同事给我指了 Autograd (github)。由于它似乎是一个流行的包,我希望这里有人知道如何使用这个包进行部分区分。我对这个库的初步测试表明 grad 函数只对第一个参数进行区分。我不确定如何将其扩展到其他论点。任何帮助将不胜感激。
谢谢。
pytorch - 为什么 autograd 不为中间变量产生梯度?
试图围绕渐变的表示方式以及 autograd 的工作原理进行思考:
为什么它不产生渐变y
?如果y.grad = dz/dy
,那么它不应该至少产生一个变量y.grad = 2*y
吗?
python - 使用 autograd 计算 tSNE 梯度
我正在尝试在 python 中实现 tSNE 算法。我正在使用 autograd 包来计算梯度,而不是通常使用的解析梯度。
但我无法根据需要计算梯度。我是 ML 新手,正在尝试使用 autograd 和其他框架。
所以,这是我的方法。我首先计算相似度矩阵 P。然后在计算损失的同时计算低维亲和度矩阵 Q。这是我的代码 -
但这种方法似乎不起作用。我收到以下错误 -
请告诉我如何纠正这个问题。我的方法是正确的吗?或者有更好的方法吗?
谢谢你。
python - 如何在 PyTorch 中查找和理解 autograd 源代码
我对autograd算法有很好的了解,我认为我应该学习一下PyTorch中的源代码。但是,当我在 GitHub 上看到该项目时,我被结构弄糊涂了,因为这么多文件包括 autograd。那么autograd最重要的核心代码是哪一部分呢?
python - tf.gradients() 不适用于 'tf.assign()',但适用于 '='
在下面的简单代码中,梯度得到正确计算。
结果,正如预期的那样[array([ 2., 2., 2., 2.], dtype=float32)]
。尝试tf.assign
用于函数计算时遇到问题。下面的代码:
...产生一个错误:
TypeError: Fetch argument None has invalid type
<class 'NoneType'>
。
为什么呢?x
和节点之间的连接是否y
通过操作“丢失”了tf.assign
?