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

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 例程(需要检查)

当问题收敛并且我得到一个合理的解决方案时,我想知道实施是否正确。具体来说,如果理解梯度和然后计算自适应学习率是否正确?

0 投票
1 回答
12487 浏览

torch - pytorch 自定义层“不是模块子类”

我是 PyTorch 的新手,在使用了一段时间的不同工具包后尝试了一下。

我想了解如何对自定义层和功能进行编程。作为一个简单的测试,我写了这个:

这旨在使通过它的数据总和为1。实际上没有用,只是在测试中。

然后我将它插入到 PyTorch Playground 的示例代码中:

结果是错误!

也许这需要是一个函数而不是一个模块?也不清楚功能,模块之间有什么区别。

例如,为什么一个 Function 需要一个backward(),即使它完全由标准 pytorch 原语构造而成,而一个 Module 不需要这个?

0 投票
0 回答
1281 浏览

python - 导数计算器 Autograd 的问题

我正在使用 Autograd,这是一个区分功能的 numpy 包装器。输出是 $f^\prime$。一个例子是tanh_prime = grad(np.tanh)返回 tanh 的一阶导数。

每当我将grad调用的输出应用于数组时,都会出现异常。例如,当一个电话grad(np.tanh)(np.arange(5)),我得到

异常字符串中的那个数组是梯度,但我不能存储它,因为它是异常的一部分。此外,为什么要调用异常,因为np.tanh是标量值函数?

0 投票
0 回答
1799 浏览

python - 大批量反向传播中的 CUDNN 错误

我实现了 MLP、RNN、CNN 的组合。批量大小为 420 时,一切似乎都运行良好(也就是我没有收到任何错误)。但是,一旦我将批次增加到 840,我就会收到以下错误:

向前传球似乎工作正常。我检查所有变量是否连续并且它们是连续的。此外,我对损失计算的预测和目标是连续的,而且返回的损失也是连续的。但是随后在调用时会发生此错误backward()。任何想法为什么会发生这种情况?

CUDA 版本 8.0.61

Python 3.5.2

评论摘要:

  • 一个序列中有 210 张图像,因此,我的批量大小为 210 步。每个图像的形状为[3, 250, 250].
  • 我正在向后使用 PyTorch,我自己还没有实现任何向后的方法。
0 投票
1 回答
1311 浏览

theano - pytorch:如何直接找到梯度wrt损失

在 theano 中,很容易获得给定损失的某个变量的梯度:

我知道 pytorch 采用了不同的范式,您可以在其中执行以下操作:

问题是我可能不想通过图形进行完全的反向传播——只是沿着到达 w 所需的路径。

requires_grad=False我知道如果您不想通过变量反向传播,您可以定义变量。但是你必须在创建变量时决定(并且requires_grad=False属性附加到变量,而不是获取梯度的调用,这看起来很奇怪)。

我的问题是是否有某种方法可以按需反向传播(即仅沿着计算所需的路径反向传播dl_dw,就像在 theano 中那样)?

0 投票
1 回答
3274 浏览

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 函数只对第一个参数进行区分。我不确定如何将其扩展到其他论点。任何帮助将不胜感激。

谢谢。

0 投票
1 回答
8059 浏览

pytorch - 为什么 autograd 不为中间变量产生梯度?

试图围绕渐变的表示方式以及 autograd 的工作原理进行思考:

为什么它不产生渐变y?如果y.grad = dz/dy,那么它不应该至少产生一个变量y.grad = 2*y吗?

0 投票
1 回答
80 浏览

python - 使用 autograd 计算 tSNE 梯度

我正在尝试在 python 中实现 tSNE 算法。我正在使用 autograd 包来计算梯度,而不是通常使用的解析梯度。

但我无法根据需要计算梯度。我是 ML 新手,正在尝试使用 autograd 和其他框架。

所以,这是我的方法。我首先计算相似度矩阵 P。然后在计算损失的同时计算低维亲和度矩阵 Q。这是我的代码 -

但这种方法似乎不起作用。我收到以下错误 -

请告诉我如何纠正这个问题。我的方法是正确的吗?或者有更好的方法吗?

谢谢你。

0 投票
3 回答
894 浏览

python - 如何在 PyTorch 中查找和理解 autograd 源代码

我对autograd算法有很好的了解,我认为我应该学习一下PyTorch中的源代码。但是,当我在 GitHub 上看到该项目时,我被结构弄糊涂了,因为这么多文件包括 autograd。那么autograd最重要的核心代码是哪一部分呢?

0 投票
1 回答
464 浏览

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