问题标签 [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.
cntk - 微软 CNTK 自动微分
根据微软的说法,CNTK 包括自动微分。为了更好地理解源代码(我已经成功构建),我想知道哪些 C++ 类实现了 AD 以及它是如何在 CNTK 中实现的?
tensorflow - Tensorflow 可以在矩阵 2 范数上采用梯度吗?
通常我们在 Tensorflow 中采用的矩阵范数是易于计算且易于理解的Frobenius范数,例如贝叶斯视图。但在很多情况下,最大的奇异值很重要。可以在 Tensorflow 中优化它吗?这取决于张量流是否可以相对于矩阵 2-范数取梯度。
python - Tensorflow 中的向量化 Hessian 计算
问题
考虑问题设置
我想要找到的是每个观察值x[i,:]
(大小N
轴)、梯度(N x K
)和 Hessian (N x K x K
)。
渐变
现在,每次观察的梯度很容易找到,因为您只需找到f
相对于所有x
值的梯度,即
这可以简单地完成
黑森州
我现在遇到的问题是找到大小(N, K, K)
Hessian 张量。如果我tf.hessians
天真地使用该功能,即
这找到(正确地)(N, K, N, K)
偏二阶导数的张量,即使对于x
观察之间的值也是如此。这些始终为 0(在我的情况下),因此对于较大的值N
可能非常低效。
我怎样才能让 Tensorflow 只找到带有条目的N
(K x K)
Hessian 矩阵进行观察?j, k
df/(dx[i,j]dx[i,k])
i
我认为值可能有一个循环解决方案0, ..., N-1
,但是N
静态图也不知道它,它只是为新输入动态定义的。
虚拟代码
以下是说明该问题的最小工作示例。
python - 当`x`已经是TensorFlow中的`tf.Variable`时可以调用`tape.watch(x)`吗?
考虑以下函数
如果函数被称为 as ,则调用 totape.watch(x)
是必要的foo(tf.constant(3.14))
,但当它直接传入变量时则不需要,例如foo(tf.Variable(3.14))
.
现在我的问题是,tape.watch(x)
即使在tf.Variable
直接传入的情况下也调用安全?还是会因为变量已经被自动监视然后再次手动监视而发生一些奇怪的事情?编写可以同时接受tf.Tensor
和的一般函数的正确方法是什么tf.Variable
?
python - 将自定义渐变定义为 Tensorflow 中的类方法
我需要将一个方法定义为自定义渐变,如下所示:
我收到以下错误:
ValueError:尝试将具有不受支持的类型 ()的值(< main .CustGradClass object at 0x12ed91710>)转换为张量。
原因是自定义梯度接受函数f(*x),其中 x 是张量序列。传递的第一个参数是对象本身,即self。
从文档中:
f:函数 f(*x),它返回一个元组 (y, grad_fn) 其中:
x 是函数的张量输入序列。y 是将 f 中的 TensorFlow 操作应用于 x 的张量或张量输出序列。grad_fn 是一个签名为 g(*grad_ys) 的函数
我如何使它工作?我需要继承一些 python tensorflow 类吗?
我正在使用 tf 版本 1.12.0 和渴望模式。
haskell - 如何在 Haskell 自动微分库“ad”中添加自定义渐变?
如果我想为函数提供自定义或已知渐变,我该如何在ad
库中做到这一点?(我不想通过这个函数自动区分。)我在这个库中使用grad函数。
如果库不提供此功能,是否有某种方法可以让我自己轻松实现此功能,也许是通过更改叶节点的定义ad
或编辑可能带有数值梯度的对偶数?
这是我的意思的一个具体例子:
假设我有一些函数我想采用梯度,比如说f(x, y) = x^2 + 3 * g(x, y)^2
. 然后说这g(x, y)
是一个定义很复杂的函数,但是我已经解析计算了它的梯度并且非常简单。因此,当我grad f
在某个点进行评估时(x, y)
,我只想插入我的自定义渐变g
,而不是通过它进行自动差异:类似于my_nice_grad_of_g (x, y)
.
我看到其他 autodiff 库确实提供了这个功能,例如Stan和Tensorflow都允许用户定义函数的梯度。
pytorch - Pytorch - 为什么预分配内存会导致“尝试第二次向后遍历图形”
假设我有一个简单的单层网络,我正在以典型的方式进行训练:
这可以按预期工作,但是如果我改为预先分配和更新输出数组,则会收到错误消息:
RuntimeError:试图第二次向后遍历图形,但缓冲区已被释放。第一次向后调用时指定retain_graph=True。
在第二个版本中 Pytorch 再次尝试向后遍历图表时发生了什么?为什么这在第一个版本中不是问题?(请注意,即使我不这样做也会发生此错误zero_grad()
)
linear-algebra - 具有扩展对称矩阵/张量支持的 Autodiff 包
在当前时间点是否存在任何支持自动微分和对称矩阵的线性代数包?
在一系列计算过程中,某些矩阵保持对称通常很重要。A <- (A + transpose(A))/2
一种可能的解决方案是在每次计算后将投影应用于对称部分。出于显而易见的原因,这充其量是次优的,在最坏的情况下速度非常慢。
我正在寻找的是一个线性代数包,它保证涉及对称矩阵的某些操作会产生对称矩阵。例如:
A + B
, AB+BA
, A^n
, A'
, c*A
, VAV'
, VV'
, V'V
A^-1
, exp(A)
, A∘B
, A ⊗ B
,
都应该再次对称,给定A
,B
对称,V
任意,c
标量。
python - 在pytorch中获取矢量化函数的梯度
我是 PyTorch 的新手,想做一些我认为很简单但遇到很多困难的事情。
我有这个函数sin(x) * cos(x) + x^2
,我想在任何时候得到那个函数的导数。
如果我用一点做到这一点,它就可以完美地工作
但是,我希望能够将向量作为 x 传递,并让它按元素评估导数。例如:
但我似乎无法让这个工作。
我试着简单地做
但我收到错误“RuntimeError:grad can be implicitly created only for scalar outputs”
如何为向量调整此代码?
提前致谢,
eigen - 如何找到 Eigen 的 AutoDiffScalar 二阶导数?
我正在深入研究 Eigen-3.3.7 的 AutoDiff 模块。考虑这个寻找 x 2导数的简单示例。
二阶导数的输出是 0 而不是 2。如何正确找到它?