问题标签 [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 回答
1406 浏览

c++ - Eigen::Spline 与 Eigen::AutoDiff 的模板参数错误

来自 EDIT 的解决方案现在作为答案发布。

老问题

我想将 的样条插值包含Eigen::Spline到一个更大的公式中,并希望借助 来确定该公式的导数Eigen::AutoDiff

我尝试了以下代码:

遗憾的是,代码的编译给出了以下错误消息:

我怎样才能避免错误?在此先感谢您提供任何有用的提示。

特征版本是 3.2.1。对于 Eigen 的 3.1 和 3.0 版本,编译也会失败。

编译器版本为:

gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu9)

0 投票
2 回答
1402 浏览

gradient - 自动微分可以处理数组切片的单独功能吗?

v给定一个长度为 say的向量30,say theano 或 tensorflow 中的自动微分工具是否能够采用如下所示的梯度:

这甚至有意义吗?我在脑海中描绘它的方式我必须通过带有尾随 0 的标识向量/矩阵进行一些乘法来转换v --> w

0 投票
1 回答
1556 浏览

c++ - Eigen 的 AutoDiffJacobian,需要一些帮助才能获得学习示例

我一直在使用 Eigen 的 AutoDiffScalar 并取得了很大的成功,现在我想改用 AutoDiffJacobian 而不是自己做这个。因此,我在学习了 AutoDiffJacobian.h 之后创建了一个学习示例,但出现了问题。

函子:

用法:

从这里收到的错误如下:

从这个错误看来,我在第二次调用 AutoDiffJacobian.h 中的函子时不知何故没有正确的函子类型,但第一次调用它有效。我希望这里有人知道为什么并且可以提供帮助,也许我只是误解了用法。

编辑:显示问题的可编译示例:

0 投票
1 回答
1066 浏览

c++ - 如何使用 Eigen::AutoDiffScalar 检索微分结果

我正在学习使用这个库。试图区分一个简单的函数 ,y = x^2不会产生预期的结果 ( dy/dx = 2x = 16when x = 8)。

0 投票
2 回答
849 浏览

optimization - Julia:使用“Optim.jl”和“autodiff”优化整数的成本函数

quad_function我喜欢通过使用Optim.jl自动微分( )来优化(最小化)以下给定函数(autodiff=true)。

我的目标函数将值四舍五入 Real为整数,因此是阶梯式的。

当我使用该autodiff选项时,我的Real值得到双数ForwardDiff.Duals)。但不幸的是round,该类型没有实现任何功能ForwardDiff.Dual。因此,我编写了一个roundtoint64函数,它提取实部。这种方法在优化过程中会引起问题。

这就是我的quad_function样子: 四函数图

问题是,optimize函数会立即收敛并且不会继续进行。

结果:

我还尝试optimize使用整数向量初始化函数[5,5]以避免四舍五入,但这也会导致在以下位置找到初始步长的问题:

问题:有没有办法告诉optimize只探索整数空间?

更新: 我认为转换方法的问题Int64是我不再有ForwardDiff.Duals ,因此无法计算任何导数/梯度。一个更好的round函数会是什么样子,哪些回合还嵌套了对偶并返回对偶?

0 投票
1 回答
151 浏览

haskell - 最小 Numeric.AD 示例无法编译

我正在尝试从 Numeric.AD 编译以下最小示例:

我遇到了这个错误:

关于为什么会发生这种情况的任何线索?通过查看前面的示例,我了解到这是“扁平化”grad的类型:

grad :: (Traversable f, Num a) => (forall s. Reifies s Tape => f (Reverse s a) -> Reverse s a) -> f a -> f a

但我实际上需要在我的代码中做这样的事情。事实上,这是不会编译的最小示例。我想做的更复杂的事情是这样的:

这是一个稍微复杂的版本,带有可以编译的类型签名。

但是,我不知道如何在代码中使用第一个版本 ,grad2因为我不知道如何处理Reverse s a. 第二个版本 ,grad2'具有正确的类型,因为我使用内部构造函数Lift来创建 a Reverse s a,但我一定不了解内部结构(特别是参数s)是如何工作的,因为输出梯度全为 0。使用其他构造函数Reverse(此处未显示)也会产生错误的渐变。

或者,是否有人们使用过ad代码的库/代码示例?我认为我的用例是一个非常常见的用例。

0 投票
2 回答
1734 浏览

tensorflow - tensorflow 如何处理复杂的梯度?

z是一个复变量,C(z)是它的共轭。在复分析理论中,不存在C(z) wrt z的导数。但是在 tesnsorflow 中,我们可以计算dC(z)/dz,结果只是1。这是一个例子:

输入X

结果Z

我不明白为什么渐变设置为1?而且我想知道tensorflow 通常如何处理复杂的渐变

0 投票
1 回答
180 浏览

machine-learning - 将来自多个网络的激活组合成一个目标时,张量流中的自动微分是否有效?

我是 tensorflow 的新手,并试图弄清楚 tensorflow 中的自动微分功能是否能解决我的问题。所以我有两个网络,每个网络输出一个潜在向量。因此,假设我的网络 A 输出潜在向量 -La(Hxr) - 其中 (H,r) 表示输出潜在向量 La 的维度。类似地,网络 B 输出 Lb(Wxr) 。所以我的目标函数将两个潜在函数都作为输入,并像 (La.Lb') 一样将它们组合起来,其中 (.) 是点积, (') 表示转置。我将使用交叉熵优化这个目标函数。

现在我的问题是张量流自动差异是否能够正确计算梯度并反向传播?这不是一个简单的案例。网络 A 应该只从梯度 wrt La 更新,而网络 B 应该只用计算得到的梯度 Lb 更新。那么 tensorflow 是否足够聪明,可以弄清楚这一点?有没有办法验证这一点?

谢谢!

0 投票
1 回答
219 浏览

machine-learning - 如果我在构建图形时有一个 for 循环,那么 tensorflow 中的 autodiff 是否有效?

我有一种情况,我有一批图像,并且在每个图像中我必须对该图像中的一个小补丁执行一些操作。现在的问题是批次中每个图像的补丁大小是可变的。所以这意味着我无法对其进行矢量化。我可以通过考虑图像中的整个像素范围来进行矢量化,但是每个图像的补丁大小实际上只是一小部分,我不想通过执行操作并存储每个图像中所有像素的结果来浪费我的内存.

所以简而言之,我需要使用一个循环。现在我看到 tensorflow 只定义了一个 while 循环,没有 for 循环。所以我的问题是,如果我使用普通的 python 风格的循环来对我的张量执行操作,autodiff 会无法计算我的图表中的梯度吗?

0 投票
1 回答
359 浏览

tensorflow - TensorFlow 支持 vgg-19 模型/特征提取器

我的任务要求我从 vgg-19 网络的 pool5 层中提取特征。以前我是使用 Caffe 做的,然后使用 Tensorflow 处理提取的特征以进行进一步的训练。但现在,我想在顶部添加一个反卷积层并微调整个网络以进行端到端训练。现在我的梯度是使用 tensroflow 获得的,而我已经使用 caffe 从 vgg-19 获得了特征,所以我想将这些梯度反向传播到 caffe 会很困难。这就是我在 tensorflow 中寻找可用于从任何层提取特征的 vgg-19 模型的原因。我在网上找到了一些项目,但它们没有得到 Tensorflow 的正式认可。