在Tensorflow中采用渐变,tf.gradient

问题描述:

我正在使用tensorflow的这个函数来获得我的函数jacobian。跨两个问题就来了:在Tensorflow中采用渐变,tf.gradient

  1. 的tensorflow文档矛盾到本身在以下两种段落如果我没有弄错:

梯度()增加了OPS到图形输出的偏导数ys关于xs。它返回长度为len(xs)的张量列表,其中每个张量是y中y的总和(dy/dx)。 Blockquote

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

根据我的测试,它是,事实上,返回LEN(YS)的载体,其是用于在XS每个x的总和(DY/DX)。

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

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

4.In的损失,我需要功能的偏导数相对于输入(X),但是当我相对于所述网络的权优化,我定义x作为占位符,其值是稍后喂食,并且权数是可变的,在这种情况下,我是否仍然可以定义函数关于输入(x)的符号导数?并把它放在损失? (后来,当我们相对于权重优化将带来函数的二阶导数)。

  1. 我认为你是正确的,有一个错字那里,它很可能意味着是“长度LEN的( YS)”。

  2. 为了效率。我无法解释推理的确切原因,但这似乎是TensorFlow处理自动分化的基本特征。请参阅issue #675

  3. 没有简单的方法来获得TensorFlow中的雅可比矩阵。看看this answer,再看看issue #675。基本上,您需要每列/每行拨打tf.gradients

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