在Tensorflow中采用渐变,tf.gradient

时间:2017-09-26 11:44:12

标签: tensorflow gradient partial derivative

我正在使用tensorflow的这个函数来获取我的函数jacobian。碰到了两个问题:

  1. 如果我没有弄错的话,张量流文档在以下两段中自相矛盾:
  2.   

    gradients()将ops添加到图形中以输出ys相对于xs的偏导数。它返回长度为len(xs)的Tensor列表,其中每个张量是y中y的和(dy / dx)。   块引用

         

    块引用   返回:   xs中每个x的和(dy / dx)列表。   块引用

    根据我的测试,它实际上是返回len(ys)的向量,它是xs中每个x的和(dy / dx)。

    1. 我不明白他们为什么设计它的方式是返回是列的总和(或行,取决于你如何定义雅可比行列式)。

    2. 我怎样才能真正得到雅可比人?

    3. 4.在丢失中,我需要关于输入(x)的函数的偏导数,但是当我针对网络权重进行优化时,我将x定义为占位符,其值稍后被输入,并且权重是可变的,在这种情况下,我还可以定义关于输入(x)的函数的符号导数吗?并把它丢失? (后来当我们对权重进行优化时会带来函数的二阶导数。)

1 个答案:

答案 0 :(得分:1)

  1. 我认为你是对的,那里有一个错字,它可能是“长度为len(ys)”。

  2. 为了提高效率。我无法准确解释推理,但这似乎是TensorFlow如何处理自动差异化的一个非常基本的特征。请参阅issue #675

  3. 在TensorFlow中获取雅可比矩阵没有直接的方法。请再次查看this answerissue #675。基本上,每列/每行需要调用tf.gradients

  4. 是的,当然。你可以计算你想要的任何渐变,实际上占位符和任何其他操作之间没有真正的区别。有一些操作没有渐变,因为它没有很好地定义或没有实现(在这种情况下它通常会返回0),但这就是全部。