Tensorflow是否正确计算这些偏导数/梯度?

时间:2018-09-20 19:01:38

标签: tensorflow

我刚刚开始学习Tensorflow,并遇到了一个对我来说没有意义的示例:

>>> import tensorflow as tf
>>> a=tf.Variable(1.)
>>> b=2*a
>>> c=a+b
>>> g=tf.gradients(c, [a,b])
>>> sess=tf.Session()
2018-09-20 13:50:59.616341: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1195] Creating TensorFlow device (/device:GPU:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0, compute capability: 6.1)
2018-09-20 13:50:59.616400: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1195] Creating TensorFlow device (/device:GPU:1) -> (device: 1, name: GeForce GTX 1080, pci bus id: 0000:02:00.0, compute capability: 6.1)
>>> print sess.run(g)
[3.0, 1.0]

c=3a起,我期望第一个部分(相对于a的部分c)为3.0。但是,c=1.5b的确是正确的,因此我期望第二部分导数是1.5,而不是1.0

另一方面,如果我执行以下操作:

>>> b = tf.Variable(2.)
>>> a = 0.5*b
>>> c = a+b
>>> g = tf.gradients(c,[a,b])

我得到这个结果:

>>> print sess.run(g)
[1.0, 1.5]

这个答案我也有类似的问题。

此外,在这两种情况下,我想我正在同一点寻找具有相同约束的相同功能的相同信息。我希望得到同样的答案。

我忘记了偏导数或代数的真正尴尬之处吗?还是我从根本上误解了Tensorflow梯度中的期望值?

图的构造是否最终导致b依赖于a,但是a却独立于b的情况?还是真正的问题是,仅应对严格彼此独立的变量进行渐变?

0 个答案:

没有答案