Tensorflow是否正确计算了这些偏导数/梯度?
我刚开始学习Tensorflow,遇到了一个对我来说毫无意义的例子:Tensorflow是否正确计算了这些偏导数/梯度?,tensorflow,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
>>> 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]
我对这个答案也有类似的问题
另外,在这两种情况下,我会认为我正在寻找关于同一点上同一函数的相同信息,具有相同的约束。我希望得到同样的答案
我是否忘记了一些关于偏导数或代数的真正令人尴尬的事情?或者,我是否从根本上误解了我可以从张量流梯度中得到什么
是否与图形构造有关,最终会造成这样一种情况:
b
依赖于a
,而a
独立于b
?或者,真正的问题是梯度应该只针对彼此严格独立的变量吗?首先,代码和描述中的数字不匹配。。。你有c=a+b
和b=2*a
,因此,对于a
,你有c=3*a
,对于b
,c=constant+b
3和1是这里正确的导数。@jdehesa-但是,如果b=2a
,那么a=0.5b
也是正确的,所以c=1.5b
不像c=3a
那样合理吗?为什么=
关系在这里不被视为完全对称的?我明白你的意思,但它不是那样工作的。假设你有g(x)=x+f(x)
,其中f(x)=2*x
。导数wrtx
为3,另一个导数wrtf(x)
,为1。这里你把f(x)
“当作”它是一个自变量,导数为1意味着“如果f(x)
增加t
,那么g(x)
将增加t*1
”。但是f(x)
增加t
并不一定意味着x
增加t/2
,你可以说现在f(x)
是2*x+t
(因为你把f(x)
看作是独立的,所以你可以给它赋值)。