问题标签 [autodiff]

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 回答
1703 浏览

python - 如何在张量流中交替训练操作?

我正在实施交替培训计划。该图包含两个训练操作。培训应该在这些之间交替进行。

这与像这样这样的研究有关

下面是一个小例子。但它似乎在每一步都更新了两个操作。我怎样才能明确地在这些之间交替?

这导致

全局步骤迭代到 1802,因此每次 train_step调用都会执行两个训练操作。(例如,当永远为假的条件为时,也会发生这种情况tf.equal(global_step,-1)。)

我的问题是如何在执行train_step1和之间交替train_step2

0 投票
1 回答
169 浏览

tensorflow - tensorflow中的自动微分支持哪些操作

我对 tf. 中的自动微分支持哪些类型的操作感到困惑。具体来说,是否支持如下张量索引操作?

0 投票
1 回答
2244 浏览

python - 如何判断 tf op 是否具有渐变?

我对在张量流中使用 a 很感兴趣SparseTensor,但是,我经常得到

LookupError:没有为操作定义梯度...

显然,对于稀疏张量的许多操作没有定义梯度计算。在实际编写和运行我的代码之前,是否有任何简单的方法可以检查操作是否具有渐变?

0 投票
1 回答
76 浏览

tensorflow - 我需要为此操作添加自定义渐变吗?

我有一个卷积层,它产生 16 个输出特征图,我想把这些图转换成 4 个图,如下所示:

  1. 将 16 个特征图分成 4 组,每组 4 个图。
  2. 将每个组乘以掩码以将某些值清零。
  3. 在每组中添加生成的特征图以获得 4 个图。

或者,我可以先将所有 16 个映射乘以一个掩码,然后将结果分成 4 个组,对每个组进行 reduce_sum。生成的 4 个映射将用作下一个卷积或池化层的输入。

Tensorflow 是否能够自动计算 tf.split、tf.multiply 和 tf.reduce_sum 组合的梯度?

编辑:这是一系列操作,其中conv是 的输出tf.layers.conv2d,并且mask是形状相同的二进制 numpy 数组conv (完整代码在此处):

0 投票
1 回答
1490 浏览

python - Tensorflow:对正向和反向传递使用不同的表达式

我有一个 tensorflow 表达式,我想根据我是计算前向还是后向(梯度)传递来使用不同的表达式。具体来说,我想忽略在反向传递期间添加到网络中的一些随机性(噪声)的影响。

这是一个简化的例子

输出类似的东西

这里的最后一个值是关于 的导zx。我希望它们不包括乘性噪声项u,即它们应该始终[-1, -1, 1]适用于 的这些输入值x

有没有办法只使用 Python 来做这样的事情?我知道我可以在 C 中创建一个自定义运算符并为它定义一个自定义渐变,但如果可能的话,我想避免这种情况。

另外,我希望将其用作 Keras 层的一部分,因此基于 Keras 的解决方案将是一种替代方案(即,如果可以为通过 Keras 层的向前和向后传递定义不同的表达式)。这确实意味着仅仅定义第二个表达式z2 = tf.sqrt(y)并调用gradients它对我来说不是一个解决方案,因为我不知道如何将它放在 Keras 中(因为在 Keras 中,它将是一个很长的计算的一部分图形)。

0 投票
1 回答
796 浏览

tensorflow - TensorFlow梯度是否计算对决策变量具有未知依赖性的函数的导数

如果您能回答我的问题或为我提供有用的资源,我将不胜感激。

目前,我正在研究一个需要进行交替优化的问题。因此,考虑我们有两个决策变量 x 和 y。在第一步中,我采用损失函数 wrt 的导数。x(对于固定 y)并更新 x。在第二步中,我需要对 wrt 进行导数。是的。问题是 x 隐含地依赖于 y,并且以一种显示 x 对 y 的依赖性的方式找到成本函数的封闭形式是不可行的,因此成本函数的梯度 wrt。是未知的。

1)我的第一个问题是TensorFlow中使用的反向模式下的“autodiff”方法是否适用于这些问题,因为我们没有明确形式的成本函数wrt到一个变量并且我们需要导数?实际上,成本函数的值是已知的,但对决策变量的依赖性通过数学是未知的。

2)从一般的角度来看,如果我将一个节点定义为“tf.Variable”并且具有通过代码执行演变的该变量的任意难以处理的函数(通过手动计算难以处理),是否可以通过“计算梯度” tf.gradients”?如果是,我如何确保正确实施?我可以使用 TensorBoard 检查吗?


我的模型太复杂了,但是可以这样考虑一个简化的形式:假设我的模型的损失函数是 L(x)。我可以在 tensorflow 的构建阶段将 L(x) 编码为“x”的函数。但是,我还有另一个初始化为零的变量“k”。当代码运行时 L(x) 对“k”形状的依赖性,所以我的损失函数实际上是 L(x,k)。更重要的是,“x”隐含地是“k”的函数。(所有优化都是使用 GradientDescent 完成的)。问题是我没有 L(x,k) 作为封闭形式的函数,但我在每一步都有 L(x,k) 的值。我可以使用像 FDSA/SPSA 这样的“数字”方法,但它们并不精确。我只需要确保正如您所说的那样,“k”和 L(x,k) 之间有一条路径,但我不知道怎么做!

0 投票
2 回答
653 浏览

c++ - 在 CppAD 中使用导数作为函数

我正在尝试修改此处的示例:

我正在尝试通过以下方式对其进行修改:

jac令 G 为在本例中计算的雅可比行列式,如下所示:

并且,如示例中所示,设X为自变量。我想构造一个新函数 ,H它是 的函数jac,即H(jacobian(X))= 某物,使得 H 是可自微的。一个例子可以是H(X) = jacobian( jacobian(X)[0]),即jacobian(X)wrt的第一个元素的雅可比X(某种二阶导数)。

问题是jac这里写的是 type Vector,它是 raw 上的参数化类型double,而不是AD<double>. 据我所知,这意味着输出不可自微。

我正在寻找一些关于是否可以在更大的运算中使用雅可比行列式的建议,并采用该较大运算的雅可比行列式(与任何算术运算符不同),或者这是否不可能。

编辑:这已经提出了一次赏金,但我再次提出来看看是否有更好的解决方案,因为我认为这很重要。更清楚一点,“正确”答案需要的元素是:

a) 一种计算任意阶导数的方法。

b) 一种不必先验地指定导数顺序的智能方法。如果在编译时必须知道最大阶导数,则无法通过算法确定导数的阶数。此外,在给出的当前答案中指定一个非常大的订单将导致内存分配问题,我想还会导致性能问题。

c) 将衍生订单的模板从最终用户中抽象出来。这很重要,因为很难跟踪所需的衍生品的顺序。如果 b) 得到解决,这可能是“免费”提供的。

如果有人能破解这个,那将是一个了不起的贡献和一个非常有用的操作。

0 投票
0 回答
116 浏览

c++ - CppAD 中的固定大小特征矩阵

如果我尝试使用 eigen 在 CppAD 中运行以下代码:

这运行良好。但是,如果我尝试执行:

提出以下断言:

如何在 CppAD 中使用固定(非动态)大小的特征向量?

0 投票
2 回答
181 浏览

tensorflow - 为什么 TensorFlow Eager Execution API 对这个函数给出了错误的答案?

我有这个功能来获得它的差异化价值。

我想获得dy/dx价值。我可以通过数值方法得到这个值,如下所示:

我使用 TensorFlow Eager Execution API 来计算这个值:

我用下面的代码调用这个函数:

它将显示如下内容:

我确信数字方法是正确的。我的 TensorFlow 急切执行代码有什么问题?顺便说一句,相同的 TensorFlow 急切执行代码可以为像 x^2 这样的简单函数得到正确答案。

0 投票
0 回答
590 浏览

tensorflow - 如何在 TensorFlow Eager Execution API 中逐个向量获取雅可比矩阵形式的导数?

在 MLP 模型中,第 l 层的输入可以通过以下公式计算:z = Wa + b W 是层l-1和层之间的权重矩阵l,a 是层神经元的输出信号l-1,b 是层的偏置l。例如:

在此处输入图像描述

我想使用 TensorFlow Eager Execution API 来获取衍生物:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

我定义了一个函数来计算 z 的值:

我的主要程序:

我可以在正向模式下得到正确的 z 值。但是当打印导数结果时,它会显示如下内容:

这不是我想要的。如何逐个向量得到雅可比矩阵导数结果?