Tensorflow梯度对于相同的输入产生不同的输出

时间:2019-03-15 06:57:54

标签: tensorflow

我试图了解tensorflow.gradient的工作方式。我尝试运行以下代码:

a = tf.constant([2,2,2])
b = 2*a
c=tf.constant([4,4,4])
print(b)
print(c)
g = tf.gradients(c, a)
g1 = tf.gradients(b, a)



with tf.Session() as sess:
    print(sess.run(g1))
    print(sess.run(g))

enter image description here

尽管b和c相同,但是g1产生正确的结果,但g没有给出任何结果。这是什么原因造成的?

1 个答案:

答案 0 :(得分:0)

因为给定的张量未连接。 documentation恰好有一个与此有关的示例(带有错别字:-))

a = tf.ones([1, 2])
b = tf.ones([3, 1])
g1 = tf.gradients([b], [a], unnconnected_gradients='none')
sess.run(g1)  # [None]

g2 = tf.gradients([b], [a], unconnected_gradients='zero')
sess.run(g2)  # [array([[0., 0.]], dtype=float32)]