【问题标题】:taking the gradient in Tensorflow, tf.gradient采用 Tensorflow 中的梯度,tf.gradient
【发布时间】:2017-09-26 11:44:11
【问题描述】:

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

  1. 如果我没记错的话,以下两段中的 tensorflow 文档自相矛盾:

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

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

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

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

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

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

【问题讨论】:

    标签: tensorflow gradient partial derivative


    【解决方案1】:
    1. 我认为你是对的,那里有一个错字,可能是“长度为 len(ys)”。

    2. 为了提高效率。我无法准确解释其中的原因,但这似乎是 TensorFlow 如何处理自动微分的一个非常基本的特征。见issue #675

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      相关资源
      最近更新 更多