我正在使用tensorflow的这个函数来获取我的函数jacobian . 遇到两个问题:
- 如果我没有弄错的话,张量流文档在以下两段中与自身相矛盾:
gradient()将ops添加到图形中以输出ys相对于xs的偏导数 . 它返回长度为len(xs)的Tensor列表,其中每个张量是y中y的和(dy / dx) . Blockquote Blockquote返回:xs中每个x的sum(dy / dx)列表 . 大段引用
根据我的测试,它实际上是返回len(ys)的向量,它是xs中每个x的和(dy / dx) .
-
我不明白为什么他们设计它的方式是返回是列的总和(或行,取决于你如何定义雅可比行列式) .
-
我怎么能真正得到雅可比人呢?
4.在丢失中,我需要关于输入(x)的函数的偏导数,但是当我针对网络权重进行优化时,我将x定义为占位符,其值稍后被输入,并且权重是可变的在这种情况下,我还可以定义关于输入(x)的函数的符号导数吗?并把它丢失? (后来当我们对权重进行优化时会带来函数的二阶导数 . )
1 回答
我认为你是对的,那里有一个错字,它可能意味着“长度为len(ys)” .
为了提高效率 . 我无法准确解释推理,但这似乎是TensorFlow如何处理自动差异化的一个非常基本的特征 . 见issue #675 .
在TensorFlow中没有直接获得雅可比矩阵的方法 . 看看this answer再次issue #675 . 基本上,每列/每行需要一次
tf.gradients
调用 .是的,当然 . 你可以计算你想要的任何渐变,实际上占位符和任何其他操作之间没有真正的区别 . 有一些操作没有渐变,因为它没有很好地定义或没有实现(在这种情况下它通常会返回0),但这就是全部 .