问题标签 [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.
tensorflow - tensorflow中的自动微分支持哪些操作
我对 tf. 中的自动微分支持哪些类型的操作感到困惑。具体来说,是否支持如下张量索引操作?
python - 如何判断 tf op 是否具有渐变?
我对在张量流中使用 a 很感兴趣SparseTensor
,但是,我经常得到
LookupError:没有为操作定义梯度...
显然,对于稀疏张量的许多操作没有定义梯度计算。在实际编写和运行我的代码之前,是否有任何简单的方法可以检查操作是否具有渐变?
tensorflow - 我需要为此操作添加自定义渐变吗?
我有一个卷积层,它产生 16 个输出特征图,我想把这些图转换成 4 个图,如下所示:
- 将 16 个特征图分成 4 组,每组 4 个图。
- 将每个组乘以掩码以将某些值清零。
- 在每组中添加生成的特征图以获得 4 个图。
或者,我可以先将所有 16 个映射乘以一个掩码,然后将结果分成 4 个组,对每个组进行 reduce_sum。生成的 4 个映射将用作下一个卷积或池化层的输入。
Tensorflow 是否能够自动计算 tf.split、tf.multiply 和 tf.reduce_sum 组合的梯度?
编辑:这是一系列操作,其中conv
是 的输出tf.layers.conv2d
,并且mask
是形状相同的二进制 numpy 数组conv
(完整代码在此处):
python - Tensorflow:对正向和反向传递使用不同的表达式
我有一个 tensorflow 表达式,我想根据我是计算前向还是后向(梯度)传递来使用不同的表达式。具体来说,我想忽略在反向传递期间添加到网络中的一些随机性(噪声)的影响。
这是一个简化的例子
输出类似的东西
这里的最后一个值是关于 的导z
数x
。我希望它们不包括乘性噪声项u
,即它们应该始终[-1, -1, 1]
适用于 的这些输入值x
。
有没有办法只使用 Python 来做这样的事情?我知道我可以在 C 中创建一个自定义运算符并为它定义一个自定义渐变,但如果可能的话,我想避免这种情况。
另外,我希望将其用作 Keras 层的一部分,因此基于 Keras 的解决方案将是一种替代方案(即,如果可以为通过 Keras 层的向前和向后传递定义不同的表达式)。这确实意味着仅仅定义第二个表达式z2 = tf.sqrt(y)
并调用gradients
它对我来说不是一个解决方案,因为我不知道如何将它放在 Keras 中(因为在 Keras 中,它将是一个很长的计算的一部分图形)。
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) 之间有一条路径,但我不知道怎么做!
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) 得到解决,这可能是“免费”提供的。
如果有人能破解这个,那将是一个了不起的贡献和一个非常有用的操作。
c++ - CppAD 中的固定大小特征矩阵
如果我尝试使用 eigen 在 CppAD 中运行以下代码:
这运行良好。但是,如果我尝试执行:
提出以下断言:
如何在 CppAD 中使用固定(非动态)大小的特征向量?
tensorflow - 为什么 TensorFlow Eager Execution API 对这个函数给出了错误的答案?
我有这个功能来获得它的差异化价值。
我想获得dy/dx
价值。我可以通过数值方法得到这个值,如下所示:
我使用 TensorFlow Eager Execution API 来计算这个值:
我用下面的代码调用这个函数:
它将显示如下内容:
我确信数字方法是正确的。我的 TensorFlow 急切执行代码有什么问题?顺便说一句,相同的 TensorFlow 急切执行代码可以为像 x^2 这样的简单函数得到正确答案。