Tensorflow: tf.argmax 不应该允许反向传播通过它

创建于 2016-04-30  ·  1评论  ·  资料来源: tensorflow/tensorflow

嘿张量流,

最近,我一直在使用 argmax 函数,但我总是在使用它之前放置一个 tf.stop_gradient 。 但是,当我删除 stop_gradient 时,tensorflow 仍然可以正常工作。

也许我误解了一些东西,但 argmax 不是一个可微的函数。 删除后反向传播如何仍然有效? 在没有任何 stop_gradient 的情况下传递 argmax 时不应该抛出错误吗?

如果可以区分 argmax,那么我将非常感谢任何显示如何做到这一点的资源。 谢谢TF!

最有用的评论

梯度几乎在任何地方都有定义,因此可以在实践中定义。 虽然它不是很有用,所以它没有在 TensorFlow 中注册这个操作。

x = tf.Variable([1., 1])
z = tf.argmax(x, 0)
sess = create_session()
xgrad = tf.gradients(z, x)
sess.run(tf.initialize_all_variables())
sess.run(xgrad)

LookupError: No gradient defined for operation 'ArgMax' (op type: ArgMax)

>所有评论

梯度几乎在任何地方都有定义,因此可以在实践中定义。 虽然它不是很有用,所以它没有在 TensorFlow 中注册这个操作。

x = tf.Variable([1., 1])
z = tf.argmax(x, 0)
sess = create_session()
xgrad = tf.gradients(z, x)
sess.run(tf.initialize_all_variables())
sess.run(xgrad)

LookupError: No gradient defined for operation 'ArgMax' (op type: ArgMax)
此页面是否有帮助?
0 / 5 - 0 等级